home *** CD-ROM | disk | FTP | other *** search
Wrap
Text File | 2009-04-28 | 1.3 MB | 39,046 lines
Text Truncated. Only the first 1MB is shown below. Download the file for the complete contents.
-- 262 -- ***** BEGIN LICENSE BLOCK ***** -- -- Copyright (c) 2006 Center for History and New Media -- George Mason University, Fairfax, Virginia, USA -- http://chnm.gmu.edu -- -- Licensed under the Educational Community License, Version 1.0 (the "License"); -- you may not use this file except in compliance with the License. -- You may obtain a copy of the License at -- -- http://www.opensource.org/licenses/ecl1.php -- -- Unless required by applicable law or agreed to in writing, software -- distributed under the License is distributed on an "AS IS" BASIS, -- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- See the License for the specific language governing permissions and -- limitations under the License. -- -- ***** END LICENSE BLOCK ***** -- Set the following timestamp to the most recent scraper update date REPLACE INTO version VALUES ('repository', STRFTIME('%s', '2009-04-28 09:15:00')); REPLACE INTO translators VALUES ('96b9f483-c44d-5784-cdad-ce21b984fe01', '1.0.0b4.r1', '', '2008-08-22 20:30:00', '1', '100', '4', 'Amazon.com', 'Sean Takats and Michael Berkowitz', '^https?://(?:www\.)?amazon', 'function detectWeb(doc, url) { var suffixRe = new RegExp("https?://(?:www\.)?amazon\.([^/]+)/"); var suffixMatch = suffixRe.exec(url); var suffix = suffixMatch[1]; var searchRe = new RegExp(''^https?://(?:www\.)?amazon\.'' + suffix + ''/(gp/search/|exec/obidos/search-handle-url/|s/)''); if(searchRe.test(doc.location.href)) { return "multiple"; } else { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var xpath = ''//input[@name="ASIN"]''; if(doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var elmt = doc.evaluate(''//input[@name="storeID"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if(elmt) { var storeID = elmt.value; Zotero.debug("store id: " + storeID); if (storeID=="books"){ return "book"; } else if (storeID=="music"){ return "audioRecording"; } else if (storeID=="dvd"|storeID=="video"){ return "videoRecording"; } else { return "book"; } } else { return "book"; } } } } ', 'function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var suffixRe = new RegExp("https?://(?:www\.)?amazon\.([^/]+)/"); var suffixMatch = suffixRe.exec(url); var suffix = suffixMatch[1]; var searchRe = new RegExp(''^https?://(?:www\.)?amazon\.'' + suffix + ''/(gp/search/|exec/obidos/search-handle-url/|s/)''); var m = searchRe.exec(doc.location.href); var uris = new Array(); if (suffix == "co.jp"){ suffix = "jp"; } if (suffix == ".com") suffix = "com"; if(m) { var xpath = ''//div[@class="productTitle"]/a | //a[span[@class="srTitle"]]''; var elmts = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var elmt = elmts.iterateNext(); var asins = new Array(); var availableItems = new Array(); var i = 0; var asinRe = new RegExp(''/(dp|product)/([^/]+)/''); do { var link = elmt.href; var searchTitle = elmt.textContent; if (asinRe.exec(link)) { var asinMatch = asinRe.exec(link); availableItems[i] = searchTitle; asins[i] = asinMatch[2]; i++; } } while (elmt = elmts.iterateNext()); var items = Zotero.selectItems(availableItems); if(!items) { return true; } for(var i in items) { uris.push("http://ecs.amazonaws." + suffix + "/onca/xml?Service=AWSECommerceService&Version=2006-06-28&Operation=ItemLookup&SubscriptionId=0H174V5J5R5BE02YQN02&ItemId=" + asins[i] + "&ResponseGroup=ItemAttributes"); } } else { var elmts = doc.evaluate(''//input[@name = "ASIN"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var elmt; while(elmt = elmts.iterateNext()) { var asin = elmt.value; } uris.push("http://ecs.amazonaws." + suffix + "/onca/xml?Service=AWSECommerceService&Version=2006-06-28&Operation=ItemLookup&SubscriptionId=0H174V5J5R5BE02YQN02&ItemId=" + asin + "&ResponseGroup=ItemAttributes"); } Zotero.Utilities.HTTP.doGet(uris, function(text) { text = text.replace(/<!DOCTYPE[^>]*>/, "").replace(/<\?xml[^>]*\?>/, ""); var texts = text.split("<Items>"); texts = texts[1].split("</ItemLookupResponse>"); text = "<Items>" + texts[0]; var xml = new XML(text); var publisher = ""; if (!xml..Errors.length()) { if (xml..Publisher.length()){ publisher = Zotero.Utilities.cleanString(xml..Publisher[0].text().toString()); } var binding = ""; if (xml..Binding.length()){ binding = Zotero.Utilities.cleanString(xml..Binding[0].text().toString()); } var productGroup = ""; if (xml..ProductGroup.length()){ productGroup = Zotero.Utilities.cleanString(xml..ProductGroup[0].text().toString()); } if (productGroup=="Book") { var newItem = new Zotero.Item("book"); newItem.publisher = publisher; } else if (productGroup == "Music") { var newItem = new Zotero.Item("audioRecording"); newItem.label = publisher; newItem.audioRecordingType = binding; for(var i=0; i<xml..Artist.length(); i++) { newItem.creators.push(Zotero.Utilities.cleanAuthor(xml..Artist[i].text().toString(), "performer")); } } else if (productGroup == "DVD" | productGroup == "Video") { var newItem = new Zotero.Item("videoRecording"); newItem.studio = publisher; newItem.videoRecordingType = binding; for(var i=0; i<xml..Actor.length(); i++) { newItem.creators.push(Zotero.Utilities.cleanAuthor(xml..Actor[i].text().toString(), "castMember")); } for(var i=0; i<xml..Director.length(); i++) { newItem.creators.push(Zotero.Utilities.cleanAuthor(xml..Director[i].text().toString(), "director")); } } else{ var newItem = new Zotero.Item("book"); newItem.publisher = publisher; } if(xml..RunningTime.length()){ newItem.runningTime = Zotero.Utilities.cleanString(xml..RunningTime[0].text().toString()); } // Retrieve authors and other creators for(var i=0; i<xml..Author.length(); i++) { newItem.creators.push(Zotero.Utilities.cleanAuthor(xml..Author[i].text().toString(), "author")); } if (newItem.creators.length == 0){ for(var i=0; i<xml..Creator.length(); i++) { newItem.creators.push(Zotero.Utilities.cleanAuthor(xml..Creator[i].text().toString())); } } if (xml..PublicationDate.length()){ newItem.date = Zotero.Utilities.cleanString(xml..PublicationDate[0].text().toString()); } else if (xml..ReleaseDate.length()){ newItem.date = Zotero.Utilities.cleanString(xml..ReleaseDate[0].text().toString()); } if (xml..Edition.length()){ newItem.edition = Zotero.Utilities.cleanString(xml..Edition[0].text().toString()); } if (xml..ISBN.length()){ newItem.ISBN = Zotero.Utilities.cleanString(xml..ISBN[0].text().toString()); } // Uncomment when numPages field is added to schema // if (xml..NumberOfPages.length()){ // newItem.numPages = Zotero.Utilities.cleanString(xml..NumberOfPages[0].text().toString()); // } var title = Zotero.Utilities.cleanString(xml..Title[0].text().toString()); if(title.lastIndexOf("(") != -1 && title.lastIndexOf(")") == title.length-1) { title = title.substring(0, title.lastIndexOf("(")-1); } if (xml..ASIN.length()){ var url = "http://www.amazon." + suffix + "/dp/" + Zotero.Utilities.cleanString(xml..ASIN[0].text().toString()); newItem.attachments.push({title:"Amazon.com Link", snapshot:false, mimeType:"text/html", url:url}); } if (xml..OriginalReleaseDate.length()){ newItem.extra = Zotero.Utilities.cleanString(xml..OriginalReleaseDate[0].text().toString()); } newItem.title = title; newItem.complete(); } }, function() {Zotero.done;}, null); Zotero.wait(); }'); REPLACE INTO translators VALUES ('aee2323e-ce00-4fcc-a949-06eb1becc98f', '1.0.0', '', '2008-09-02 13:40:00', '0', '100', '4', 'Epicurious', 'Sean Takats', '^https?://www\.epicurious\.com/(?:tools/searchresults|recipes/food/views)', 'function detectWeb(doc, url){ var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var xpath = ''//div[@id="ingredients"]''; var multxpath = ''//table[@class="search-results"]/tbody/tr''; if(doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){ return "document"; } else if (doc.evaluate(multxpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){ return "multiple"; } }', 'function cleanText(s){ s = s.replace(/\n+/g, "\n"); s = s.replace(/(\n|\r)\t+/g, "\n"); s = s.replace(/\t+/g, " "); s = s.replace(" ", "", "g"); return s; } function scrape(doc){ var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var newItem = new Zotero.Item("document"); var xpath = ''//title''; var title = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; title = Zotero.Utilities.trimInternal(title); title = title.substring(0, title.indexOf(" Recipe at Epicurious.com")); newItem.title = title; var elmt; xpath = ''//p[@class="source"]''; var elmts = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null); if (elmt = elmts.iterateNext()){ var authordate = elmt.textContent; var authordates = authordate.split("|"); newItem.creators.push(Zotero.Utilities.cleanAuthor(authordates[0], "contributor", true)); var datestring = authordates[1].toString(); datestring = datestring.replace("Copyright", ""); newItem.date = Zotero.Utilities.formatDate(Zotero.Utilities.strToDate(datestring)); while (elmt = elmts.iterateNext()){ Zotero.debug("looping?"); Zotero.debug(elmt.textContent); newItem.creators.push(Zotero.Utilities.cleanAuthor(elmt.textContent, "contributor", false)); } } xpath = ''//div[@id="recipe_intro"]/p''; if (elmt = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){ var abstract = elmt.textContent; abstract = Zotero.Utilities.cleanString(abstract); newItem.abstractNote = abstract; } xpath = ''//div[@id="ingredients"]''; if (elmt = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){ var ingredients = elmt.textContent; ingredients = Zotero.Utilities.superCleanString(ingredients); ingredients = cleanText(ingredients); } xpath = ''//div[@id="preparation"]''; if (elmt = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){ var prep = elmt.textContent; prep = Zotero.Utilities.superCleanString(prep); prep = cleanText(prep); prep = prep.replace(/\n/g, "\n\n"); } xpath = ''//div[@id="recipe_summary"]/p''; if (elmt = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){ var serving = elmt.textContent; serving = Zotero.Utilities.superCleanString(serving); serving = cleanText(serving); } // notestring = ingredients + "\n\n" + prep + "\n\n" + serving; // newItem.notes.push({note:notestring}); newItem.notes.push({note:ingredients}); newItem.notes.push({note:prep}); newItem.notes.push({note:serving}); var url = doc.location.href; var snapshotURL = url.replace("/views/", "/printerfriendly/"); newItem.attachments.push({title:"Epicurious.com Snapshot", mimeType:"text/html", url:snapshotURL, snapshot:true}); newItem.url = url; newItem.attachments.push({title:"Epicurious.com Link", snapshot:false, mimeType:"text/html", url:url}); newItem.complete(); } function doWeb(doc, url){ var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var singxpath = ''//div[@id="ingredients"]''; var multxpath = ''//table[@class="search-results"]/tbody/tr''; if(doc.evaluate(singxpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){ // single recipe page scrape(doc, url); } else if (doc.evaluate(multxpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){ var items = new Object(); var elmtxpath = ''//div[@id="resultstable"]/table[@class="search-results"]/tbody/tr/td[3][@class="name"]/a[@class="hed"]''; var elmts = doc.evaluate(elmtxpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var elmt; while (elmt = elmts.iterateNext()) { var title = elmt.textContent; var link = elmt.href; if (title && link){ items[link] = title; } } var items = Zotero.selectItems(items); if(!items) { return true; } var urls = new Array(); for(var i in items) { urls.push(i); } Zotero.Utilities.processDocuments(urls, scrape, function() { Zotero.done(); }); Zotero.wait(); } }'); REPLACE INTO translators VALUES ('0dda3f89-15de-4479-987f-cc13f1ba7999', '1.0.0b4.r1', '', '2008-12-22 19:50:00', 1, 100, 4, 'Ancestry.com US Federal Census', 'Elena Razlogova', '^https?://search.ancestry.com/(.*)usfedcen|1890orgcen|1910uscenindex', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var result = doc.evaluate(''//div[@class="g_container"]/div[@class="g_panelWrap"]/div[@class="g_panelCore"]/div[@class="s_container"]/div[@class="p_rsltList"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); var rows = doc.evaluate(''//div[@class="g_container"]/div[@class="g_panelWrap"]/div[@class="g_panelCore"]/div[@class="s_container"]/div[@class="p_rsltList"]/table/tbody/tr[@class="tblrow record"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var row; while(row = rows.iterateNext()) { links = doc.evaluate(''.//a'', row, nsResolver, XPathResult.ANY_TYPE, null); var linkNo=0; while(link=links.iterateNext()) { linkNo=linkNo+1; } break; } if(result && linkNo == 2) { return "multiple"; } else { var indivRe = /indiv=1/; var m = indivRe.exec(doc.location.href); var indiv = 0; if(m) { indiv = 1; } checkURL = doc.location.href.replace("pf=", ""); if(doc.location.href == checkURL && indiv == 1) { return "bookSection"; } } }', '// this US Federal Census scraper is a hack - so far there is no proper item type in Zotero for this kind of data (added to trac as a low priority ticket) // this scraper creates proper citation for the census as a whole (should be cited as book) // but also adds name, city, and state for a particular individual to the citation to make scanning for names & places easier in the middle pane // (that''s why the resulting item type is a book section) // it also adds all searchable text as a snapshot and a scan of the census record as an image function scrape(doc) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; // get initial census data; a proper census record item type should have separate fields for all of these except perhaps dbid var info = doc.evaluate(''//div[@class="facets"][@id="connect"]/div[@class="g_box"]/p/a'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if(info) { info = info.toString(); var data = new Array(); var parts = info.split(/[?&]/); for each(var part in parts) { var index = part.indexOf("="); if(index !== -1) { data[part.substr(0, index)] = part.substr(index+1); } } if(data.ln) { var lastName = data.ln.replace(/\+/g, " "); var firstName = data.fn.replace(/\+/g, " "); } else { var lastName = data.fn.replace(/\+/g, " "); var firstName = ""; } var dOb = data.by; // this does not get saved yet because no field is available; the info is in the snapshot if(data.rfd) { var yearRe = /([0-9]{4})/; var m = yearRe.exec(data.rfd); if(m) { var year = m[1]; } } else { var year = data.ry; } var state = data.rs.replace(/\+/g, " "); var county = data.rcnty.replace(/\+/g, " "); // this does not get saved yet because no field is available; the info is in the snapshot var city = data.rcty.replace(/\+/g, " "); var dbid = data.dbid; } // set census number for citation - let me know if this can be done in a better way var censusYear = 0; var censusNo = ""; var censusNos = new Array("1790", "First", "1800", "Second", "1810", "Third", "1820", "Fourth", "1830", "Fifth", "1840", "Sixth", "1850", "Seventh", "1860", "Eighth", "1870", "Ninth", "1880", "Tenth", "1890", "Eleventh", "1900", "Twelfth", "1910", "Thirteenth", "1920", "Fourteenth", "1930", "Fifteenth") for(var i in censusNos) { if(censusYear == 1) { censusNo = censusNos[i] }; if(censusNos[i] == year) { censusYear = 1 } else {censusYear= 0 }; } //begin adding item var newItem = new Zotero.Item("bookSection"); newItem.title = city+", "+state; // this is not proper citation but is needed to easily scan for placenames in middle pane newItem.publicationTitle = censusNo+" Census of the United States, "+year; newItem.publisher = "National Archives and Records Administration"; newItem.place = "Washington, DC"; newItem.date = year; // get snapshot with all searchable text and a simplified link to the record for the URL field var dbRe = /db=([0-9a-z]+)/; var m = dbRe.exec(doc.location.href); if(m) { db = m[1]; } var snapshotRe = /\&h=([0-9]+)/; var m = snapshotRe.exec(doc.location.href); if(m) { snapshotURL = "http://search.ancestry.com/cgi-bin/sse.dll?db="+db+"&indiv=1&pf=1&h="+m[1]; newItem.attachments.push({title:"Ancestry.com Snapshot", mimeType:"text/html", url:snapshotURL, snapshot:true}); cleanURL = "http://search.ancestry.com/cgi-bin/sse.dll?indiv=1&db="+db+"&fh=0&h="+m[1]; newItem.url = cleanURL; } // add particular individual being surveyed as contributor - this is not proper citation but is needed so one could easily scan for names in middle pane var creator = new Array(); creator.firstName = firstName; creator.lastName = lastName; creator.creatorType = "author"; newItem.creators.push(creator); //add proper author for citation var creator = new Array(); creator.lastName = "United States of America, Bureau of the Census"; creator.creatorType = "contributor"; newItem.creators.push(creator); // get scan of the census image var scanInfo = doc.evaluate(''//div[@id="record-main"]/table[@class="p_recTable"]/tbody/tr/td[2][@class="recordTN"]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if(scanInfo) { var scanRe = /iid=([A-Z0-9_-]+)/; var m = scanRe.exec(scanInfo); if(m) { scanURL = "http://content.ancestry.com/Browse/print_u.aspx?dbid="+dbid+"&iid="+m[1]; Zotero.debug("scan url: " + scanURL); } } if(scanURL){ Zotero.Utilities.HTTP.doGet(scanURL, function(text) { Zotero.debug("running doGet"); Zotero.debug(text); var imageRe = /950 src="([^"]+)"/; var m = imageRe.exec(text); if(m) { imageURL = m[1]; Zotero.debug("image url: " + imageURL); newItem.attachments.push({title:"Ancestry.com Image", mimeType:"image/jpeg", url:imageURL, snapshot:true}); } newItem.complete(); Zotero.done(); }); } else { newItem.complete(); Zotero.done(); } } function doWeb(doc, url) { var resultsRegexp = /&h=/; if(resultsRegexp.test(url)) { scrape(doc); } else { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; // get census year for links to items var yearRe = /db=([0-9]+)/; var m = yearRe.exec(doc.location.href); if(m) { year = m[1]; } var dbRe = /db=([0-9a-z]+)/; var m = dbRe.exec(doc.location.href); if(m) { db = m[1]; } //select items var items = new Array(); var listElts = doc.evaluate(''//tr[@class="tblrow record keySelect"] | //tr[@class="tblrow record"] | //tr[@class="tblrowalt record"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var recid; var link; var name; while (listElt = listElts.iterateNext()) { recInfo = doc.evaluate(''.//a'', listElt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); var recidRe = /recid=([0-9]+)/; var m = recidRe.exec(recInfo); if(m) { recid = m[1]; } link = "http://search.ancestry.com/cgi-bin/sse.dll?indiv=1&db="+db+"&fh=0&h="+recid; name = doc.evaluate(''.//span[@class="srchHit"]'', listElt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; items[link] = Zotero.Utilities.cleanString(name); } items = Zotero.selectItems(items); if(!items) return true; var urls = new Array(); for(var i in items) { urls.push(i); } Zotero.Utilities.processDocuments(urls, scrape, function() { Zotero.done(); }); Zotero.wait(); } }'); REPLACE INTO translators VALUES ('838d8849-4ffb-9f44-3d0d-aa8a0a079afe', '1.0.0b3.r1', '', '2008-02-07 21:15:00', 1, 100, 4, 'OCLC WorldCat FirstSearch', 'Simon Kornblith', 'https?://[^/]*firstsearch\.oclc\.org[^/]*/WebZ/', 'function detectWeb(doc, url) { var detailRe = /FirstSearch: [\w ]+ Detailed Record/; var searchRe = /FirstSearch: [\w ]+ List of Records/; if(detailRe.test(doc.title)) { return "book"; } else if(searchRe.test(doc.title)) { return "multiple"; } }', 'function processURLs(urls) { if(!urls.length) { // last url Zotero.done(); return; } var newUrl = urls.shift(); Zotero.Utilities.HTTP.doPost(newUrl, ''exportselect=record&exporttype=plaintext'', function(text) { var lineRegexp = new RegExp(); lineRegexp.compile("^([\\w() ]+): *(.*)$"); var newItem = new Zotero.Item("book"); newItem.extra = ""; var lines = text.split(''\n''); for(var i=0;i<lines.length;i++) { var testMatch = lineRegexp.exec(lines[i]); if(testMatch) { var match = newMatch; var newMatch = testMatch } else { var match = false; } if(match) { // is a useful match if(match[1] == ''Title'') { var title = match[2]; if(!lineRegexp.test(lines[i+1])) { i++; title += '' ''+lines[i]; } if(title.substring(title.length-2) == " /") { title = title.substring(0, title.length-2); } newItem.title = Zotero.Utilities.capitalizeTitle(title); } else if(match[1] == "Series") { newItem.series = match[2]; } else if(match[1] == "Description") { var pageMatch = /([0-9]+) p\.?/ var m = pageMatch.exec(match[2]); if(m) { newItem.pages = m[1]; } } else if(match[1] == ''Author(s)'' || match[1] == "Corp Author(s)") { var yearRegexp = /[0-9]{4}-([0-9]{4})?/; var authors = match[2].split('';''); if(authors) { newItem.creators.push(Zotero.Utilities.cleanAuthor(authors[0], "author", true)); for(var j=1; j<authors.length; j+=2) { if(authors[j-1].substring(0, 1) != ''('' && !yearRegexp.test(authors[j])) { // ignore places where there are parentheses newItem.creators.push({lastName:authors[j], creatorType:"author", fieldMode:true}); } } } else { newItem.creators.push(Zotero.Utilities.cleanString(match[2])); } } else if(match[1] == ''Publication'') { match[2] = Zotero.Utilities.cleanString(match[2]); if(match[2].substring(match[2].length-1) == '','') { match[2] = match[2].substring(0, match[2].length-1); } // most, but not all, WorldCat publisher/places are // colon delimited var parts = match[2].split(/ ?: ?/); if(parts.length == 2) { newItem.place = parts[0]; newItem.publisher = parts[1]; } else { newItem.publisher = match[2]; } } else if(match[1] == ''Institution'') { newItem.publisher = match[2]; } else if(match[1] == ''Standard No'') { var ISBNRe = /ISBN:\s*([0-9X]+)/ var m = ISBNRe.exec(match[2]); if(m) newItem.ISBN = m[1]; } else if(match[1] == ''Year'') { newItem.date = match[2]; } else if(match[1] == "Descriptor") { if(match[2][match[2].length-1] == ".") { match[2] = match[2].substr(0, match[2].length-1); } var tags = match[2].split("--"); for(var j in tags) { newItem.tags.push(Zotero.Utilities.cleanString(tags[j])); } } else if(match[1] == "Accession No") { newItem.accessionNumber = Zotero.Utilities.superCleanString(match[2]); } else if(match[1] == "Degree") { newItem.itemType = "thesis"; newItem.thesisType = match[2]; } else if(match[1] == "DOI") { newItem.DOI = match[2]; } else if(match[1] == "Database") { if(match[2].substr(0, 8) != "WorldCat") { newItem.itemType = "journalArticle"; } } else if(match[1] != "Availability" && match[1] != "Find Items About" && match[1] != "Document Type") { newItem.extra += match[1]+": "+match[2]+"\n"; } } else { if(lines[i] != "" && lines[i] != "SUBJECT(S)") { newMatch[2] += " "+lines[i]; } } } if(newItem.extra) { newItem.extra = newItem.extra.substr(0, newItem.extra.length-1); } newItem.complete(); processURLs(urls); }, false, ''iso-8859-1''); } function doWeb(doc, url) { var sessionRegexp = /(?:\?|\:)sessionid=([^?:]+)(?:\?|\:|$)/; var numberRegexp = /(?:\?|\:)recno=([^?:]+)(?:\?|\:|$)/; var resultsetRegexp = /(?:\?|\:)resultset=([^?:]+)(?:\?|\:|$)/; var hostRegexp = new RegExp("^(https?://[^/]+)/"); var sMatch = sessionRegexp.exec(url); var sessionid = sMatch[1]; var hMatch = hostRegexp.exec(url); var host = hMatch[1]; var newUri, exportselect; var detailRe = /FirstSearch: [\w ]+ Detailed Record/; if(detailRe.test(doc.title)) { var publisherRegexp = /^(.*), (.*?),?$/; var nMatch = numberRegexp.exec(url); if(nMatch) { var number = nMatch[1]; } else { number = 1; } var rMatch = resultsetRegexp.exec(url); if(rMatch) { var resultset = rMatch[1]; } else { // It''s in an XPCNativeWrapper, so we have to do this black magic resultset = doc.forms.namedItem(''main'').elements.namedItem(''resultset'').value; } urls = [host+''/WebZ/DirectExport?numrecs=10:smartpage=directexport:entityexportnumrecs=10:entityexportresultset='' + resultset + '':entityexportrecno='' + number + '':sessionid='' + sessionid + '':entitypagenum=35:0'']; } else { var items = Zotero.Utilities.getItemArray(doc, doc, ''/WebZ/FSFETCH\\?fetchtype=fullrecord'', ''^(See more details for locating this item|Detailed Record)$''); items = Zotero.selectItems(items); if(!items) { return true; } var urls = new Array(); for(var i in items) { var nMatch = numberRegexp.exec(i); var rMatch = resultsetRegexp.exec(i); if(rMatch && nMatch) { var number = nMatch[1]; var resultset = rMatch[1]; urls.push(host+''/WebZ/DirectExport?numrecs=10:smartpage=directexport:entityexportnumrecs=10:entityexportresultset='' + resultset + '':entityexportrecno='' + number + '':sessionid='' + sessionid + '':entitypagenum=35:0''); } } } processURLs(urls); Zotero.wait(); }'); REPLACE INTO translators VALUES ('a2363670-7040-4cb9-8c48-6b96584e92ee', '1.0.0b4.r5', '', '2008-09-03 23:35:00', '0', '100', '4', 'Florida University Libraries (Endeca 1)', 'Sean Takats', '^http://[^/]+/[^\.]+.jsp\?[^/]*(?:Ntt=|NttWRD=)', 'function detectWeb(doc, url){ var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var xpath = ''//div[starts-with(@id, "briefTitle")]''; if(doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } if (url.indexOf("&V=D")){ return "book"; } else if (url.indexOf("&V=M")){ return "book"; } else if (url.indexOf("&V=U")){ return "book"; } }', 'function doWeb(doc, url){ var newUris = new Array(); var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var xpath = ''//div[starts-with(@id, "briefTitle")]/a[starts-with(@id, "Title")]''; var elmts = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var elmt; if(elmt = elmts.iterateNext()) { // search page var items = new Array(); do { items[elmt.href] = Zotero.Utilities.cleanString(elmt.textContent); } while (elmt = elmts.iterateNext()); items = Zotero.selectItems(items); if(!items) { return true; } for(var i in items) { var newUri = i.replace(/&V=./, "&V=M"); newUris.push(newUri); } } else { // single page var newURL = url.replace(/&V=./, "&V=M"); newUris.push(newURL); } var translator = Zotero.loadTranslator("import"); translator.setTranslator("a6ee60df-1ddc-4aae-bb25-45e0537be973"); var marc = translator.getTranslatorObject(); Zotero.Utilities.processDocuments(newUris, function(newDoc) { var uri = newDoc.location.href; var xpath = ''//tr[@class="trGenContent"][td[3]]''; var elmts = newDoc.evaluate(xpath, newDoc, nsResolver, XPathResult.ANY_TYPE, null); var elmt; var record = new marc.record(); while(elmt = elmts.iterateNext()) { var field = Zotero.Utilities.superCleanString(newDoc.evaluate(''./TD[1]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent); var value = newDoc.evaluate(''./TD[3]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; if(field == "LDR") { record.leader = value; } else if(field != "FMT") { value = value.replace(/\|([a-z]) /g, marc.subfieldDelimiter+"$1"); var code = field.substring(0, 3); var ind = ""; if(field.length > 3) { ind = field[3]; if(field.length > 4) { ind += field[4]; } } record.addField(code, ind, value); } } var newItem = new Zotero.Item(); record.translate(newItem); var domain = url.match(/https?:\/\/([^/]+)/); newItem.repository = domain[1]+" Library Catalog"; newItem.complete(); }, function() { Zotero.done(); }, null); Zotero.wait(); }'); REPLACE INTO translators VALUES ('88915634-1af6-c134-0171-56fd198235ed', '1.0.0b3.r1', '', '2008-12-02 10:10:00', '1', '100', '4', 'Library Catalog (Voyager)', 'Simon Kornblith', 'Pwebrecon\.cgi', 'function detectWeb(doc, url) { var export_options = doc.forms.namedItem(''frm'').elements.namedItem(''RD'').options; for(var i in export_options) { if(export_options[i].text == ''Latin1 MARC'' || export_options[i].text == ''Raw MARC'' || export_options[i].text == ''MARC 8'' || export_options[i].text == ''MARC-8'' || export_options[i].text == ''UTF-8'' || export_options[i].text == ''MARC (Unicode/UTF-8)'' || export_options[i].text == ''MARC UTF-8'' || export_options[i].text == ''UTF-8 MARC (Unicode)'' || export_options[i].text == ''UTF8-Unicode'' || export_options[i].text == ''MARC (non-Unicode/MARC-8)'' || export_options[i].text == ''MARC communication format'') { // We have an exportable single record if(doc.forms.namedItem(''frm'').elements.namedItem(''RC'')) { return "multiple"; } else { return "book"; } } } }', 'function doWeb(doc, url) { var postString = ''''; var form = doc.forms.namedItem(''frm''); var newUri = form.action; var multiple = false; if(doc.forms.namedItem(''frm'').elements.namedItem(''RC'')) { multiple = true; var availableItems = new Object(); // Technically, associative arrays are objects var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; // Require link to match this var tagRegexp = new RegExp(); tagRegexp.compile(''Pwebrecon\\.cgi\\?.*v1=[0-9]+\\&.*ti=''); // Do not allow text to match this var rejectRegexp = new RegExp(); rejectRegexp.compile(''\[ [0-9]+ \]''); var checkboxes = new Array(); var urls = new Array(); var tableRows = doc.evaluate(''//form[@name="frm"]//table/tbody/tr[td/input[@type="checkbox"]]'', doc, nsResolver, XPathResult.ANY_TYPE, null); // Go through table rows var tableRow; var i = 0; while(tableRow = tableRows.iterateNext()) { i++; // CHK is what we need to get it all as one file var input = doc.evaluate(''./td/input[@name="CHK"]'', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); checkboxes[i] = input.value; var links = tableRow.getElementsByTagName("a"); // Go through links for(var j=0; j<links.length; j++) { if(tagRegexp.test(links[j].href)) { var text = links[j].textContent; if(text) { text = Zotero.Utilities.cleanString(text); if(!rejectRegexp.test(text)) { if(availableItems[i]) { availableItems[i] += " "+text; } else { availableItems[i] = text; } } } } } // if no title, pull from second td if(!availableItems[i]) { availableItems[i] = Zotero.Utilities.cleanString(doc.evaluate(''./td[2]'', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent); } } var items = Zotero.selectItems(availableItems); if(!items) { return true; } // add arguments for items we need to grab for(var i in items) { postString += "CHK="+checkboxes[i]+"&"; } } var raw, unicode, latin1; for(var i=0; i<form.elements.length; i++) { if(form.elements[i].type && form.elements[i].type.toLowerCase() == ''hidden'') { postString += escape(form.elements[i].name)+''=''+escape(form.elements[i].value)+''&''; } } var export_options = form.elements.namedItem(''RD'').options; for(var i=0; i<export_options.length; i++) { if(export_options[i].text == ''Raw MARC'' || export_options[i].text == ''MARC 8'' || export_options[i].text == ''MARC-8'' || export_options[i].text == ''MARC (non-Unicode/MARC-8)'') { raw = i; } if(export_options[i].text == ''Latin1 MARC'') { latin1 = i; } else if(export_options[i].text == ''UTF-8'' || export_options[i].text == ''UTF-8 MARC (Unicode)'' || export_options[i].text == ''UTF8-Unicode'' || export_options[i].text == ''MARC UTF-8'' || export_options[i].text == ''MARC (Unicode/UTF-8)'' || export_options[i].text == ''MARC communication format'') { unicode = i; } } var responseCharset = null; if(unicode) { var rd = unicode; responseCharset = ''UTF-8''; } else if(latin1) { var rd = latin1; responseCharset = ''ISO-8859-1''; } else if(raw) { var rd = raw; } else { return false; } postString += ''RD=''+rd+''&MAILADDY=&SAVE=Press+to+SAVE+or+PRINT''; // No idea why this doesn''t work as post Zotero.Utilities.HTTP.doGet(newUri+''?''+postString, function(text) { // load translator for MARC var marc = Zotero.loadTranslator("import"); marc.setTranslator("a6ee60df-1ddc-4aae-bb25-45e0537be973"); marc.setString(text); // if this is the LOC catalog, specify that in repository field if(url.length > 23 && url.substr(0, 23) == "http://catalog.loc.gov/") { marc.setHandler("itemDone", function(obj, item) { item.repository = "Library of Congress Catalog"; item.complete(); }); } else { var domain = url.match(/https?:\/\/([^/]+)/); marc.setHandler("itemDone", function(obj, item) { item.repository = domain[1]+" Library Catalog"; item.complete(); }); } marc.translate(); Zotero.done(); }, null, responseCharset); Zotero.wait(); }'); REPLACE INTO translators VALUES ('a81243b5-a9fd-4921-8441-3142a518fdb7', '1.0', '', '2008-09-22 20:20:00', '0', '100', '4', 'Library Catalog (Voyager 7)', 'Sean Takats', '/vwebv/(holdingsInfo|search)', 'function detectWeb(doc, url){ var bibIdRe = new RegExp("bibId=[0-9]+"); if (bibIdRe.test(url)){ return "book"; } var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var titles = doc.evaluate(''//div[@class="resultListTextCell"]/div/label'', doc, nsResolver, XPathResult.ANY_TYPE, null); if (titles.iterateNext()){ return "multiple"; } }', 'function doWeb(doc, url){ var bibIdRe = new RegExp("bibId=([0-9]+)"); var m = bibIdRe.exec(url); var hostRegexp = new RegExp("^(https?://[^/]+)/"); var hMatch = hostRegexp.exec(url); var host = hMatch[1]; var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var newUris = new Array(); if (m){ //single item newUris.push(host + "/vwebv/exportRecord.do?bibId=" + m[1] + "&format=utf-8"); } else { //search results var items = new Object(); var titles = doc.evaluate(''//div[@class="resultListTextCell"]/div/label'', doc, nsResolver, XPathResult.ANY_TYPE, null); var title; while (title = titles.iterateNext()) { var bibId = doc.evaluate(''@for'', title, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; items[bibId] = title.textContent; } items = Zotero.selectItems(items); for (var i in items) { newUris.push(host + "/vwebv/exportRecord.do?bibId=" + i + "&format=utf-8"); } } Zotero.Utilities.HTTP.doGet(newUris, function(text) { // load translator for MARC var marc = Zotero.loadTranslator("import"); marc.setTranslator("a6ee60df-1ddc-4aae-bb25-45e0537be973"); marc.setString(text); var domain = url.match(/https?:\/\/([^/]+)/); marc.setHandler("itemDone", function(obj, item) { item.repository = domain[1]+" Library Catalog"; item.complete(); }); marc.translate(); Zotero.done(); }) Zotero.wait(); }'); REPLACE INTO translators VALUES ('176948f7-9df8-4afc-ace7-4c1c7318d426', '1.0.0b4.r5', '', '2008-09-02 13:40:00', '0', '100', '4', 'ESpacenet', 'Gilles Poulain', 'http://v3.espacenet.com/', 'function detectWeb(doc, url) { if(doc.location.href.match("results?")) { return "multiple"; } else if (doc.location.href.match("textdoc")) { return "patent"; } }', 'function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var titles = doc.evaluate(''//td[3]/strong/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_title; while (next_title = titles.iterateNext()) { items[next_title.href] = next_title.textContent; } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); } function getItem(reftext,re) { var item = reftext.match(re); return item[1]; } function scrape(doc,url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; //Get title var xpath = "/html/body/form/table[2]/tbody/tr[1]/td[3]/h2"; if(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext()){ var title = Zotero.Utilities.cleanString(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); var title1 = title.split(" "); for (var j in title1) { title1[j] = title1[j][0].toUpperCase() + title1[j].substr(1).toLowerCase(); } title = title1.join(" "); } //Get Abstract var xpath = ''//td[@id="abCell"]''; if(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext()){ var abstract = Zotero.Utilities.cleanString(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); } //Get Applicant var xpath = "//table[1]/tbody/tr/td[1]/table/tbody/tr[4]/td[2]"; if(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext()){ var applicant = Zotero.Utilities.cleanString(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); } //Get application number var xpath = "//table[1]/tbody/tr/td[1]/table/tbody/tr[8]/td[2]"; if(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext()){ var anumber = Zotero.Utilities.cleanString(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); } //Get patent number var xpath = "//table[1]/tbody/tr/td[1]/table/tbody/tr[1]/td[2]"; if(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext()){ var pnumber = Zotero.Utilities.cleanString(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); } //Get CIB var xpath = "//table[1]/tbody/tr/td[1]/table/tbody/tr[6]/td[2]"; if(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext()){ var CIBnumber = Zotero.Utilities.cleanString(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); } //Get ECLA var xpath = "//table[1]/tbody/tr/td[1]/table/tbody/tr[7]/td[2]"; if(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext()){ var tmpECLAnumber = Zotero.Utilities.cleanString(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); tmpECLAnumber = tmpECLAnumber.substr(24); tmpECLAnumber = tmpECLAnumber.replace(/\)+/g, ''; ''); var aus = tmpECLAnumber.split("; "); var ECLAnumber = ""; for (var i=0; i< aus.length/2 ; i++){ ECLAnumber = ECLAnumber + aus[i] + "; " } } //Get priority number var xpath = "//table[1]/tbody/tr/td[1]/table/tbody/tr[9]/td[2]"; if(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext()){ var prnumber = Zotero.Utilities.cleanString(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); } //Get date var xpath = "//table[1]/tbody/tr/td[1]/table/tbody/tr[2]/td[2]"; if(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext()){ var date = Zotero.Utilities.cleanString(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); } //Get Creators var xpath = "//table[1]/tbody/tr/td[1]/table/tbody/tr[3]/td[2]"; if(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext()){ var author = Zotero.Utilities.cleanString(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); } //Create Zotero Ref var newArticle = new Zotero.Item(''patent''); newArticle.url = doc.location.href; newArticle.title = title; newArticle.date = date; newArticle.abstractNote = abstract; newArticle.assignee = applicant; newArticle.patentNumber = pnumber; newArticle.priorityNumbers = prnumber; newArticle.applicationNumber = anumber; newArticle.extra = "CIB: " + CIBnumber + "\nECLA: " + ECLAnumber var author1 = author.split("; "); ; for (var m = 0; m< author1.length; m++) { if (author1[m].match(/\(/)) { author1[m] = author1[m].substr(0, author1[m].length-5); } words = author1[m].split(/\s/); for (var j in words) { words[j] = words[j][0].toUpperCase() + words[j].substr(1).toLowerCase(); } var inventor = ''''; for (var k = 1; k < words.length; k++) { inventor = inventor +words[k] + " "; if (k == words.length-1) { inventor = inventor +words[0]; newArticle.creators.push(Zotero.Utilities.cleanAuthor(inventor, "inventor")); } } } newArticle.complete(); }'); REPLACE INTO translators VALUES ('f6717cbb-2771-4043-bde9-dbae19129bb3', '1.0.0b4.r5', '', '2008-07-24 05:15:00', '0', '100', '4', 'Archeion', 'Adam Crymble', 'http://archeion-aao', 'function detectWeb(doc, url) { if (doc.evaluate(''//td[@class="full"]/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else if (doc.evaluate(''//div[@class="main"]/h1'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "book"; } }', '//Archeion translator. code by Adam Crymble //The way the site is formatted, I can''t split the creators up logically. I have left them off for now. function associateData (newItem, dataTags, field, zoteroField) { if (dataTags[field]) { newItem[zoteroField] = dataTags[field]; } } function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; newItem = new Zotero.Item("book"); var xPathHeadings = doc.evaluate(''//th'', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathContent = doc.evaluate(''//table[@class="results"]/tbody/tr/td'', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathCount = doc.evaluate(''count (//th)'', doc, nsResolver, XPathResult.ANY_TYPE, null); var fieldTitle; var dataTags = new Object(); var multiAuthorCheck = new Array(); for (var i = 0; i < xPathCount.numberValue; i++) { fieldTitle=xPathHeadings.iterateNext().textContent.replace(/\s+/g, ''''); //This was Michael Berkowitz''s suggested Fix. /*var ts = doc.getElementsByTagName(("table"), 1) = ts.length, ar = []; while ((i--)) { if (ts[i].className&&ts[i].className.match("results")) { ar[ar.length] = ts[i].getElementsByTagName("td")[0].split(/\<br\>/); } } Zotero.debug(ar[0][0]); */ //COULDN"T SPLIT BY ("\n") TO SEPARATE MULTIPLE CREATORS. if (fieldTitle == "Creator:" | fieldTitle == "Cr├⌐ateur:") { fieldTitle == "Creator:"; var authorContent = xPathContent.iterateNext().textContent; //Zotero.debug(authorContent); //if (authorContent.match('' (*) '')) { // Zotero.debug(doc.title); //} //var test = authorContent.split(/\<br\>/); //Zotero.debug(test); authors = authorContent.match(/\w+,?\s+[\w\(\)\.]+/g); //Zotero.debug(authors); for (i = 0; i < authors.length; i++) { var author = authors[i].split(", "); if (author.length < 2) { dataTags["Creator:"] = author[0]; newItem.creators.push({lastName: dataTags["Creator:"], creatorType: "creator"}); } else { dataTags["Creator:"] = (author[1] + (" ") + author[0]); //Zotero.debug(authorArranged); newItem.creators.push(Zotero.Utilities.cleanAuthor(dataTags["Creator:"], "creator")); } } } else { dataTags[fieldTitle] = Zotero.Utilities.cleanTags(xPathContent.iterateNext().textContent); //Zotero.debug(fieldTitle); } } associateData (newItem, dataTags, "Datesofmaterial:", "date"); associateData (newItem, dataTags, "Repository:", "repository"); associateData (newItem, dataTags, "ReferenceNumber:", "callNumber"); associateData (newItem, dataTags, "PhysicalDescription:", "extra"); associateData (newItem, dataTags, "Scopeandcontent", "abstractNote"); associateData (newItem, dataTags, "Dates:", "date"); associateData (newItem, dataTags, "Centred''archives:", "repository"); associateData (newItem, dataTags, "Num├⌐roder├⌐f├⌐rence:", "callNumber"); associateData (newItem, dataTags, "Descriptionmat├⌐rielle:", "extra"); associateData (newItem, dataTags, "Port├⌐eetcontenu", "abstractNote"); newItem.title = doc.evaluate(''//h1'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var xPathLinks = doc.evaluate(''//td[@class="full"]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var linksCounter = doc.evaluate(''count (//td[@class="full"]/a)'', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathTitles = doc.evaluate(''//table[@class="results"]/tbody/tr[1]/td'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_link; for (var i = 0; i < linksCounter.numberValue; i++) { next_link = xPathLinks.iterateNext().href; items[next_link] = xPathTitles.iterateNext().textContent; } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); } '); REPLACE INTO translators VALUES ('d9a16cf3-8b86-4cab-8610-dbd913ad1a44', '1.0.0b4.r5', '', '2008-07-24 05:30:00', '0', '100', '4', 'Archives Canada-France', 'Adam Crymble', 'http://bd.archivescanadafrance.org', 'function detectWeb(doc, url) { if (doc.location.href.match("doc.xsp?")) { return "book"; } else if (doc.evaluate(''//li/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else if (doc.evaluate(''//td[1][@class="icones"]/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } }', 'function associateData (newItem, dataTags, field, zoteroField) { if (dataTags[field]) { newItem[zoteroField] = dataTags[field]; } } function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var dataTags = new Object(); var tagsContent = new Array(); var fieldTitle; var newItem = new Zotero.Item("book"); var xPathHeaders = ''//td[2]/div[@class="ead-c"]/div[@class="ead-did"]/table[@class="ead-did"]/tbody/tr/td[1]''; if (doc.evaluate(xPathHeaders, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var headers = doc.evaluate(xPathHeaders, doc, nsResolver, XPathResult.ANY_TYPE, null); var contents = doc.evaluate(''//td[2][@class="did-content"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); while (fieldTitle = headers.iterateNext()) { fieldTitle = fieldTitle.textContent.replace(/\s+/g, ''''); if (fieldTitle == "Origination" || fieldTitle == "Origine") { fieldTitle = "Origination"; } dataTags[fieldTitle] = Zotero.Utilities.cleanTags(contents.iterateNext().textContent.replace(/^\s*|\s*$/g, '''')); } if (dataTags["Origination"]) { var author = dataTags["Origination"]; if (!author.match(", ")) { newItem.creators.push({lastName: author, creatorType: "author"}); } else { var authors = author.split(", "); author = authors[1] + " " + authors[0]; newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author")); } } } if (doc.evaluate(''//h1[@class="doc-title"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { newItem.title = doc.evaluate(''//h1[@class="doc-title"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; } else if (doc.evaluate(''//td[2]/div[@class="notice"]/p'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { newItem.title = doc.evaluate(''//td[2]/div[@class="notice"]/p'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; } else { newItem.title = doc.title + " Title Not Found"; } associateData (newItem, dataTags, "PhysicalDescription", "pages"); associateData (newItem, dataTags, "Descriptionmat├⌐rielle", "pages"); associateData (newItem, dataTags, "Repository", "repository"); associateData (newItem, dataTags, "Lieudeconservation", "repository"); associateData (newItem, dataTags, "LanguageoftheMaterial", "language"); associateData (newItem, dataTags, "Langue", "language"); associateData (newItem, dataTags, "Identifier", "callNumber"); associateData (newItem, dataTags, "Cote", "callNumber"); associateData (newItem, dataTags, "Datesextr├¬mes", "date"); associateData (newItem, dataTags, "Dates", "date"); newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); if (doc.evaluate(''//td[1][@class="icones"]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var titles = doc.evaluate(''//td[2][@class="ressource"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var titlesCount = doc.evaluate(''count (//td[2][@class="ressource"])'', doc, nsResolver, XPathResult.ANY_TYPE, null); var links = doc.evaluate(''//td[1][@class="icones"]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_link; for (var i = 0; i < titlesCount.numberValue; i++) { next_link = links.iterateNext().href; if (!next_link.match("doc.xsp")) { next_link = links.iterateNext().href; } items[next_link] = titles.iterateNext().textContent; } } if (doc.evaluate(''//li/a'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var titles = doc.evaluate(''//li/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_title; while (next_title = titles.iterateNext()) { items[next_title.href] = next_title.textContent; } } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else if (doc.evaluate(''//div[@class="ancestor"]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var link = doc.evaluate(''//div[@class="ancestor"]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().href; articles = [link]; } else { articles = [url] } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('661fc39a-2500-4710-8285-2d67ddc00a69', '1.0', '', '2008-09-02 13:55:00', '0', '100', '4', 'Artefacts Canada', 'Adam Crymble', 'http://daryl.chin.gc.ca', 'function detectWeb(doc, url) { var multi1 = ''''; var single1 = ''''; if (doc.evaluate(''//div[@id="mainContent"]/table/tbody/tr/td[1]/h1'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { multi1 = doc.evaluate(''//div[@id="mainContent"]/table/tbody/tr/td[1]/h1'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent; } var xpath = ''//tbody/tr[1]/td[2]/span''; if (doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { single1 = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent; } if (multi1.match("Search Results") || multi1.match("R├⌐sultats de recherche")) { return "multiple"; } else if (single1.match("Document") || single1.match("Enregistrement")) { return "artwork"; } }', 'function associateData (newItem, dataTags, field, zoteroField) { if (dataTags[field]) { newItem[zoteroField] = dataTags[field]; } } function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var dataTags = new Object(); var tagsContent = new Array(); var fieldTitle; var newItem = new Zotero.Item("artwork"); var headers = doc.evaluate(''//td[1][@class="leftResTitle"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var contents = doc.evaluate(''//td[2][@class="pageText"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); while (fieldTitle = headers.iterateNext()) { fieldTitle = fieldTitle.textContent.replace(/\s+/g, ''''); if (fieldTitle == "Titre:") { fieldTitle = "Title:"; } else if (fieldTitle == "Nomdel''objet:") { fieldTitle = "NameofObject:"; } else if (fieldTitle == "Sujetouimage:") { fieldTitle = "Subject/Image:"; } else if (fieldTitle == "Num├⌐rod''accession:") { fieldTitle = "AccessionNumber:"; } else if (fieldTitle == "Artisteouartisan:") { fieldTitle = "Artist/Maker:"; } else if (fieldTitle == "Fabricant:") { fieldTitle = "Manufacturer:"; } dataTags[fieldTitle] = contents.iterateNext().textContent.replace(/^\s*|\s*$/g, '''') } Zotero.debug(dataTags); if (dataTags["Artist/Maker:"]) { if (dataTags["Artist/Maker:"].match(", ")) { var authors = dataTags["Artist/Maker:"].split(", "); authors = authors[0] + '' '' + authors[1]; newItem.creators.push(authors, "creator"); } else { newItem.creators.push(dataTags["Artist/Make:"], "creator"); } } if (dataTags["Manufacturer:"]) { newItem.creators.push(Zotero.Utilities.cleanAuthor(dataTags["Manufacturer:"], "creator")); } if (dataTags["AccessionNumber:"]) { newItem.locInArchive = "Accession Number: " + dataTags["AccessionNumber:"]; } if (dataTags["Subject/Image:"]) { if (dataTags["Subject/Image:"].match(/\n/)) { var subjects = dataTags["Subject/Image:"].split(/\n/); for (var i = 0; i < subjects.length; i++) { newItem.tags[i] = subjects[i]; } } else { newItem.tags[0] = dataTags["Subject/Image:"].match(/\n/); } } if (dataTags["Title:"]) { associateData (newItem, dataTags, "Title:", "title"); associateData (newItem, dataTags, "NameofObject:", "medium"); } else if (dataTags["NameofObject:"]) { associateData (newItem, dataTags, "NameofObject:", "title"); } else { newItem.title = "No Title Found"; } associateData (newItem, dataTags, "LatestProductionDate:", "date"); associateData (newItem, dataTags, "Datedefindeproduction:", "date"); associateData (newItem, dataTags, "Institution:", "repository"); associateData (newItem, dataTags, "├ëtablissement:", "repository"); associateData (newItem, dataTags, "Description:", "description"); associateData (newItem, dataTags, "Medium:", "medium"); associateData (newItem, dataTags, "M├⌐dium:", "medium"); newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var titles = doc.evaluate(''//tr[1]/td[2][@class="pageText"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var links = doc.evaluate(''//td/a[@class="moreInfoink"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_title; while (next_title = titles.iterateNext()) { items[links.iterateNext().href] = next_title.textContent; } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); } '); REPLACE INTO translators VALUES ('fef07360-ee97-4f67-b022-6f64d5ec0c25', '1.0.0b4.r5', '', '2008-09-22 20:20:00', '1', '100', '4', 'KOBV', 'Gunar Maiwald', '^http://vs13.kobv.de/V/', 'function detectWeb(doc, url) { if (doc.evaluate(''//tr /td[@class="no_wrap_center"]/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else if (doc.evaluate(''//tr/th[@class="no_wrap"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "book"; } }', 'function scrape(doc) { var translator = Zotero.loadTranslator("import"); translator.setTranslator("a6ee60df-1ddc-4aae-bb25-45e0537be973"); var marc = translator.getTranslatorObject(); var xpath; if (doc.title.match("Freie Universit├ñt Berlin")) { xpath =''//li/a[@title="Ansicht des Originalformats"]''; } else if (doc.title.match("KOBV")) { xpath =''//li/a[@title="Ansicht des bibliothekarischen Formats"]''; } else if (doc.title.match("UB der HU Berlin")) { xpath =''//li/a[@title="Ansicht des Originalformats"]''; } else if (doc.title.match("^MetaLib")) { xpath =''//li/a[@title="Ansicht des Originalformats"]''; } var hrefs = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null); var href; while (href = hrefs.iterateNext()) { var url = href.getAttribute("href"); url += "&format=005"; Zotero.Utilities.processDocuments([url], function(newDoc) { var record = new marc.record(); var xpath = ''//table//tr''; var elmts = newDoc.evaluate(xpath, newDoc, null, XPathResult.ANY_TYPE, null); var elmt; while (elmt = elmts.iterateNext()) { var field = Zotero.Utilities.trimInternal(newDoc.evaluate(''./td[1]'', elmt, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); var value = Zotero.Utilities.trimInternal(newDoc.evaluate(''./td[2]'', elmt, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); value = value.replace(/\|([a-z]) /g,marc.subfieldDelimiter+"$1"); var code = field.substring(0,3); var ind = field.substr(3); // QnD for Authors: if (code == "100" && ind == "11" && value.match(marc.subfieldDelimiter+"b")) { var values = value.split(marc.subfieldDelimiter); var forename = values[1].substr(1); var surname = values[2].substr(1); value = marc.subfieldDelimiter+"a"+surname+", "+forename; ind = 1; } record.addField(code, ind, value); } var newItem = new Zotero.Item(); record.translate(newItem); newItem.complete(); }, function() { Zotero.done; }); Zotero.wait(); } } function doWeb(doc, url) { var xpath1 = ''//table/tbody/tr/td[@class="no_wrap_center"]/a''; var xpath2 = ''//table/tbody/tr/th[@class="no_wrap"]''; var newUrls = new Array(); if (doc.evaluate(xpath1, doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { var items = Zotero.Utilities.getItemArray(doc, doc, ''^http://vs13.kobv.de/V/.*format=999$'',''^[0-9]+$''); items = Zotero.selectItems(items); for (var url in items) { newUrls.push(url); } } else if (doc.evaluate(xpath2, doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { newUrls.push(url); } Zotero.Utilities.processDocuments(newUrls, scrape, function() { Zotero.done; }); Zotero.wait(); }'); REPLACE INTO translators VALUES ('39ea814e-8fdb-486c-a88d-59479f341066', '1.0.0b4.r5', '', '2008-07-24 05:15:00', '0', '100', '4', 'Bibliotheque UQAM', 'Adam Crymble', 'http://www.manitou.uqam.ca', 'function detectWeb(doc, url) { if (doc.evaluate(''//center/table/tbody/tr[1]/td/input'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else if (doc.title.match("d├⌐tails")) { return "book"; } }', 'function associateData (newItem, dataTags, field, zoteroField) { if (dataTags[field]) { newItem[zoteroField] = dataTags[field]; } } function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == "x" ) return namespace; else return null; } : null; var newItem = new Zotero.Item("book"); var dataTags = new Object(); var tagsContent = new Array(); var contents; var newItemAuthors1 = new Array(); var newItemAuthors2 = new Array(); var xPathHeadings = doc.evaluate(''//p/table/tbody/tr/td[1]/b'', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathContents = doc.evaluate(''//p/table/tbody/tr/td[2]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathCount = doc.evaluate(''count (//p/table/tbody/tr/td[1]/b)'', doc, nsResolver, XPathResult.ANY_TYPE, null); var dump = xPathHeadings.iterateNext(); for (i=0; i<xPathCount.numberValue-1; i++) { fieldTitle=xPathHeadings.iterateNext().textContent.replace(/\s+/g, ''''); contents = xPathContents.iterateNext().textContent; if (fieldTitle == "Titres:") { fieldTitle = "Titre:"; } //determines media type if (fieldTitle == "Titre:") { dataTags[fieldTitle] = contents.replace(/^\s*|\s*$/g, ''''); if (contents.match("enregistrement sonore")) { var newItem = new Zotero.Item("audioRecording"); } else if (contents.match("musique")) { var newItem = new Zotero.Item("audioRecording"); } else if (contents.match("enregistrement vid├⌐o")) { var newItem = new Zotero.Item("videoRecording"); } else { var newItem = new Zotero.Item("book"); } } //gets author(s). if (fieldTitle == "Auteur:") { fieldTitle = "author"; dataTags[fieldTitle] = contents; if (dataTags[fieldTitle].match(",")) { var authorName = dataTags["author"].split(","); authorName[0] = authorName[0].replace(/^\s*|\s*$/g, ''''); dataTags["author"] = (authorName[1] + (" ") + authorName[0]); } else { var parenthesis = dataTags["author"].indexOf("("); if (parenthesis > 0) { dataTags["author"] = dataTags["author"].substr(0, parenthesis); } dataTags["author"] = dataTags["author"].replace(/^\s*|\s*$/g, ''''); } } else if (fieldTitle == "Auteurs:") { dataTags[fieldTitle] = contents; var multiAuthors = dataTags["Auteurs:"].split(/\n/); for (var j = 0; j < multiAuthors.length; j++) { var parenthesis = multiAuthors[j].indexOf("("); if (parenthesis > 0) { multiAuthors[j] = multiAuthors[j].substr(0, parenthesis); } if (multiAuthors[j] != "" && multiAuthors[j] != '' '') { if (multiAuthors[j].match(", ")) { var authorName = multiAuthors[j].split(","); newItemAuthors1.push(authorName[1] + (" ") + authorName[0]); } else { newItemAuthors2.push(multiAuthors[j]); } } } } else if (fieldTitle == "├ëditeur:") { dataTags[fieldTitle] = contents; var imprintSplit = dataTags["├ëditeur:"].split(": "); if (imprintSplit.length > 1) { newItem.place = imprintSplit[0].replace(/^\s*|\s*$/g, ''''); var publisherDate = imprintSplit[1].split(", "); newItem.publisher = publisherDate[0].replace(/^\s*|\s*$/g, ''''); if (publisherDate.length > 1) { newItem.date = publisherDate[1].replace(/^\s*|\s*$/g, ''''); } } else { newItem.publisher = dataTags["├ëditeur:"]; } } else if (fieldTitle == "Sujet:") { dataTags[fieldTitle] = contents; if (dataTags["Sujet:"].match("\n")) { tagsContent = (dataTags["Sujet:"].split(/\n/)); } } else { dataTags[fieldTitle] = contents.replace(/^\s*|\s*$/g, ''''); } } //pushes tags for (var y = 0; y < tagsContent.length; y++) { if (tagsContent[y]!='''' && tagsContent[y]!= " ") { var parenthesis = tagsContent[y].indexOf("("); if (parenthesis > 0) { tagsContent[y] = tagsContent[y].substr(0, parenthesis); } newItem.tags[y] = tagsContent[y]; } } //because newItem is not defined until after the authors have, authors must be put into Zotero outside the main for loop. if (dataTags["author"]) { newItem.creators.push(Zotero.Utilities.cleanAuthor(dataTags["author"], "author")); } for (var i = 0; i < newItemAuthors1.length; i++) { newItem.creators.push(Zotero.Utilities.cleanAuthor(newItemAuthors1[i], "author")); } for (var i = 0; i < newItemAuthors2.length; i++) { newItem.creators.push({lastName: newItemAuthors2[i], creatorType: "creator"}); } //trims title as best as possible if (dataTags["Titre:"].match(/\[/)) { var splitter = dataTags["Titre:"].indexOf("["); } if (dataTags["Titre:"].match("/")) { var splitter1 = dataTags["Titre:"].indexOf("/"); } if (splitter1 > -1 && splitter > -1) { if (splitter1 > splitter) { dataTags["Titre:"] = dataTags["Titre:"].substr(0, splitter); } else { dataTags["Titre:"] = dataTags["Titre:"].substr(0, splitter1); } } else if (splitter1 > -1) { dataTags["Titre:"] = dataTags["Titre:"].substr(0, splitter1); } else if (splitter > -1) { dataTags["Titre:"] = dataTags["Titre:"].substr(0, splitter); } associateData (newItem, dataTags, "Titre:", "title"); associateData (newItem, dataTags, "Num├⌐ro:", "ISBN"); associateData (newItem, dataTags, "Description:", "pages"); associateData (newItem, dataTags, "Banque:", "repository"); associateData (newItem, dataTags, "Langue:", "language"); associateData (newItem, dataTags, "Localisation:", "Loc. in Archive"); newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var titles = doc.evaluate(''/html/body/table/tbody/tr/td/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); for (var i = 0; i < 4; i++) { var dump = titles.iterateNext(); } var next_title; while (next_title = titles.iterateNext()) { items[next_title.href] = next_title.textContent; Zotero.debug(next_title.href); Zotero.debug(next_title.textContent); } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('6f9aa90d-6631-4459-81ef-a0758d2e3921', '1.0.0b4.r5', '', '2008-07-24 05:15:00', '0', '100', '4', 'Blogger', 'Adam Crymble', 'blogspot.com', 'function detectWeb(doc, url) { if (doc.evaluate(''//h3[@class="post-title entry-title"]/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { var entryCount = doc.evaluate(''count (//h3[@class="post-title entry-title"]/a)'', doc, null, XPathResult.ANY_TYPE, null); } if (entryCount.numberValue == 1) { return "blogPost"; } else if (entryCount.numberValue > 1) { return "multiple"; } }', '//Blogger translator. Code by Adam Crymble function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var tagsContent = new Array(); var newItem = new Zotero.Item("blogPost"); //title if (doc.evaluate(''//h3[@class="post-title entry-title"]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { newItem.title = doc.evaluate(''//h3[@class="post-title entry-title"]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; } else { newItem.title = doc.title; } //author, if available if (doc.evaluate(''//span[@class="post-author vcard"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var author = doc.evaluate(''//span[@class="post-author vcard"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.replace(/^\s*|\s*$/g, ''''); var author = author.toLowerCase(); if (author.match(/\sby\s/)) { var shortenAuthor = author.indexOf(" by"); author = author.substr(shortenAuthor + 3).replace(/^\s*|\s$/g, ''''); } var words = author.split(/\s/); for (var i in words) { words[i] = words[i][0].toUpperCase() + words[i].substr(1).toLowerCase(); } author = words.join(" "); newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author")); } //date, if available if (doc.evaluate(''//h2[@class="date-header"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { newItem.date = doc.evaluate(''//h2[@class="date-header"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; } //tags, if available if (doc.evaluate(''//span[@class="post-labels"]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var tags = doc.evaluate(''//span[@class="post-labels"]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var tags1; while (tags1 = tags.iterateNext()) { tagsContent.push(tags1.textContent); } for (var i = 0; i < tagsContent.length; i++) { newItem.tags[i] = tagsContent[i]; } } var blogTitle1 = doc.title.split(":"); newItem.blogTitle = blogTitle1[0]; newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var titles = doc.evaluate(''//h3[@class="post-title entry-title"]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var titles1 = doc.evaluate(''//li[@class="archivedate expanded"]/ul[@class="posts"]/li/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_title; while (next_title = titles.iterateNext()) { items[next_title.href] = next_title.textContent; } while (next_title = titles1.iterateNext()) { items[next_title.href] = next_title.textContent; } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('f9373e49-e6ac-46f7-aafe-bb24a2fbc3f0', '1.0.0b4.r5', '', '2008-09-02 13:40:00', '0', '100', '4', 'Bracero History Archive', 'Adam Crymble', 'http://braceroarchive.org', 'function detectWeb(doc, url) { if (doc.title.match("Item")) { return "book"; } else if (doc.evaluate(''//div[@class="item-meta"]/h2/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } }', '//Bracero History Archive translator; Code by Adam Crymble function associateData (newItem, dataTags, field, zoteroField) { if (dataTags[field]) { newItem[zoteroField] = dataTags[field]; } } function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var dataTags = new Object(); var fieldTitle; var contents1; var headers = doc.evaluate(''//h3'', doc, nsResolver, XPathResult.ANY_TYPE, null); var contents = doc.evaluate(''//div[@class="field"]/div'', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathCount = doc.evaluate(''count (//div[@class="field"]/div)'', doc, nsResolver, XPathResult.ANY_TYPE, null); for (i=0; i<xPathCount.numberValue -1; i++) { fieldTitle = headers.iterateNext().textContent.replace(/\s+/g, ''''); contents1 = contents.iterateNext().textContent.replace(/^\s*|\s*$/g, ''''); if (contents1.match("Empty")) { contents1 = ''''; } dataTags[fieldTitle] = Zotero.Utilities.cleanTags(contents1); } //media type? if (dataTags["TypeName"]) { if (dataTags["TypeName"].match("Oral History")) { Zotero.debug(doc.title); var newItem = new Zotero.Item("audioRecording"); } else { var newItem = new Zotero.Item("book"); } } else { var newItem = new Zotero.Item("book"); } //creators if (dataTags["Interviewee"] && dataTags["Interviewee"] != '''') { if (dataTags["Interviewee"].match(", ")) { var authors = dataTags["Interviewee"].split(", "); authors = authors[1] + '' '' + authors[0]; newItem.creators.push(Zotero.Utilities.cleanAuthor(authors, "interviewee")); } else { newItem.creators.push({lastName: dataTags["Interviewee"], creatorType: "interviewee"}); } } if (dataTags["Interviewer"] && dataTags["Interviewer"] != '''') { if (dataTags["Interviewer"].match(", ")) { var authors = dataTags["Interviewer"].split(", "); authors = authors[1] + '' '' + authors[0]; newItem.creators.push(Zotero.Utilities.cleanAuthor(authors, "interviewer")); } else { newItem.creators.push({lastName: dataTags["Interviewee"], creatorType: "interviewer"}); } } if (dataTags["Creator"] && dataTags["Creator"] != '''') { if (dataTags["Creator"].match(", ")) { var authors = dataTags["Creator"].split(", "); authors = authors[1] + '' '' + authors[0]; newItem.creators.push(Zotero.Utilities.cleanAuthor(authors, "creator")); } else { newItem.creators.push(Zotero.Utilities.cleanAuthor(dataTags["Creator"], "creator")); } } if (dataTags["AdditionalCreator"] && dataTags["AdditionalCreator"] != '''') { if (dataTags["AdditionalCreator"].match(", ")) { var authors = dataTags["AdditionalCreator"].split(", "); authors = authors[1] + '' '' + authors[0]; newItem.creators.push(Zotero.Utilities.cleanAuthor(authors, "creator")); } else { newItem.creators.push({lastName: dataTags["AdditionalCreator"], creatorType: "creator"}); } } //associate associateData (newItem, dataTags, "Description", "abstractNote"); associateData (newItem, dataTags, "Date", "date"); associateData (newItem, dataTags, "Publisher", "publisher"); associateData (newItem, dataTags, "Source", "place"); associateData (newItem, dataTags, "Location", "place"); associateData (newItem, dataTags, "RightsHolder", "rights"); associateData (newItem, dataTags, "Language", "lang"); associateData (newItem, dataTags, "Title:", "title"); associateData (newItem, dataTags, "FileNameIdentifier", "callNumber"); //tags var tags1; var tagsContent = new Array(); if (doc.evaluate(''//li[@class="tag"]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var xPathTags = doc.evaluate(''//li[@class="tag"]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); while (tags1 = xPathTags.iterateNext()) { tagsContent.push(tags1.textContent); } } for (var i = 0; i < tagsContent.length; i++) { newItem.tags[i] = tagsContent[i]; } //title newItem.title = doc.evaluate(''//h1'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); var fullRecord = "view=full"; var extraChar = "?"; if (detectWeb(doc, url) == "multiple") { var items = new Object(); var titles = doc.evaluate(''//div[@class="item-meta"]/h2/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_title; while (next_title = titles.iterateNext()) { items[next_title.href + extraChar + fullRecord] = next_title.textContent; } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('4da40f07-904b-4472-93b6-9bea1fe7d4df', '1.0.0b4.r5', '', '2008-07-24 05:30:00', '0', '100', '4', 'Canada.com', 'Adam Crymble', 'http://www.canada.com', 'function detectWeb(doc, url) { if (doc.location.href.match("story")) { return "newspaperArticle"; } else if (doc.location.href.match("search")) { return "multiple"; } }', ' function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var dataTags = new Object(); var tagsContent = new Array(); var fieldTitle; var newItem = new Zotero.Item("newspaperArticle"); newItem.title = doc.title; if (doc.evaluate(''//div[@class="storyheader"]/h4'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { newItem.abstractNote = doc.evaluate(''//div[@class="storyheader"]/h4'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; } else if (doc.evaluate(''//div[@class="storyheader"]/h2'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { newItem.abstracteNote = doc.evaluate(''//div[@class="storyheader"]/h2'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; } if (doc.evaluate(''//div[@class="feed_details"]/h4'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var author = doc.evaluate(''//div[@class="feed_details"]/h4'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; if (author.match(/\n/)) { author1 = author.split(/\n/); if (author1[0].match(/ and /)) { author2 = author1[0].split(/ and /); for (var i in author2) { newItem.creators.push(Zotero.Utilities.cleanAuthor(author2[i], "author")); } } else { newItem.creators.push(Zotero.Utilities.cleanAuthor(author1[0], "author")); } } else { newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author")); } } if (doc.evaluate(''//div[@class="feed_details"]/span'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var date1 = doc.evaluate(''//div[@class="feed_details"]/span'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.replace(/^\s*|\s*$/g, ''''); if (date1.match("Published:")) { date1 = date1.substr(11); newItem.date = date1; } } if (doc.evaluate(''//ul[@class="home"]/li/a/span'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var pubTitle = doc.evaluate(''//ul[@class="home"]/li/a/span'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; if (pubTitle.match("Home")) { newItem.publicationTitle = pubTitle.substr(0, pubTitle.length-5); } else { newItem.publicationTitle = pubTitle; } } else { newItem.publicationTitle = "Canada.com"; } newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var next_title; if (doc.evaluate(''//div[@class="even"]/p/a'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { Zotero.debug("AAAAAA"); var titles0 = doc.evaluate(''//div[@class="even"]/p/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); while (next_title = titles0.iterateNext()) { if (next_title.href.match("story") && next_title.href.match("canada.com")) { items[next_title.href] = next_title.textContent; } } } if (doc.evaluate(''//div[@class="odd"]/p/a'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { Zotero.debug("BBBBB"); var titles1 = doc.evaluate(''//div[@class="odd"]/p/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); while (next_title = titles1.iterateNext()) { if (next_title.href.match("story") && next_title.href.match("canada.com")) { items[next_title.href] = next_title.textContent; } } } if (doc.evaluate(''//p/b/a'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { Zotero.debug("CCCCC"); var titles2 = doc.evaluate(''//p/b/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); while (next_title = titles2.iterateNext()) { if (next_title.href.match("story") && next_title.href.match("canada.com")) { items[next_title.href] = next_title.textContent; } } } if (doc.evaluate(''//div[@class="name"]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { Zotero.debug("DDDD"); var titles3 = doc.evaluate(''//div[@class="name"]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); while (next_title = titles3.iterateNext()) { if (next_title.href.match("story") && next_title.href.match("canada.com")) { items[next_title.href] = next_title.textContent; } } } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('31649d9d-8f7e-4b87-8678-b3e68ee98f39', '1.0.0b4.r5', '', '2008-09-02 13:40:00', '0', '100', '4', 'CARL/ABRC OAI Harvester', 'Adam Crymble', 'http://carl-abrc-oai', 'function detectWeb(doc, url) { if (doc.title.match("Search")) { return "multiple"; } else if (doc.title.match("Browse")) { return "multiple"; } else if (doc.title.match("Record")) { return "book"; } }', 'function associateData (newItem, dataTags, field, zoteroField) { if (dataTags[field]) { newItem[zoteroField] = dataTags[field]; } } function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var dataTags = new Object(); var allAuthors = new Array(); var newItem = new Zotero.Item("book"); var metaTagHTML = doc.getElementsByTagName("meta"); for (var i = 0 ; i < metaTagHTML.length ; i++) { dataTags[metaTagHTML[i].getAttribute("name")] = Zotero.Utilities.cleanTags(metaTagHTML[i].getAttribute("content")); if (metaTagHTML[i].getAttribute("name") == "DC.Creator") { allAuthors.push(dataTags["DC.Creator"]); } } Zotero.debug(allAuthors); for (var i = 0; i < allAuthors.length; i++) { if (allAuthors[i].match(",")) { var authorName = allAuthors[i].split(","); allAuthors[i] = (authorName[1] + (" ") + authorName[0]); if (allAuthors[i].match("; ; ")) { allAuthors[i] = allAuthors[i].replace("; ;", ''''); } newItem.creators.push(Zotero.Utilities.cleanAuthor(allAuthors[i], "author")); } else { if (allAuthors[i].match("; ; ")) { allAuthors[i] = allAuthors[i].replace("; ;", ''''); } newItem.creators.push({lastName: allAuthors[i], creatorType: "creator"}); } } associateData (newItem, dataTags, "DC.Title", "title"); associateData (newItem, dataTags, "DC.Description", "abstractNote"); associateData (newItem, dataTags, "DC.Publisher", "publisher"); associateData (newItem, dataTags, "DC.Contributor", "extra"); associateData (newItem, dataTags, "DC.Date", "date"); associateData (newItem, dataTags, "DC.Language", "language"); newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var titles = doc.evaluate(''//span[@class="title"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var links = doc.evaluate(''//div[@class="main"]/div/div/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_title; while (next_title = titles.iterateNext()) { items[links.iterateNext().href] = next_title.textContent; links.iterateNext(); } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('50d3ca81-3c4c-406b-afb2-0fe8105b9b38', '1.0.0b4.r5', '', '2008-09-02 13:40:00', '0', '100', '4', 'Champlain Society - Collection', 'Adam Crymble', 'http://link.library.utoronto.ca', 'function detectWeb(doc, url) { if (doc.location.href.match("search_results")) { return "multiple"; } else if (doc.location.href.match("item_record")) { return "book"; } }', '//Champlain Collection translator. Code by Adam Crymble function associateData (newItem, dataTags, field, zoteroField) { if (dataTags[field]) { newItem[zoteroField] = dataTags[field]; } } function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var dataTags = new Object(); var tagsContent = new Array(); var fieldTitle; var newItem = new Zotero.Item("book"); var headers = doc.evaluate(''//table[1]/tbody/tr/td[1]/b/font'', doc, nsResolver, XPathResult.ANY_TYPE, null); var contents = doc.evaluate(''//td/table[1]/tbody/tr/td[2]/font'', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathCount = doc.evaluate(''count (//table[1]/tbody/tr/td[1]/b/font)'', doc, nsResolver, XPathResult.ANY_TYPE, null); for (i=0; i<xPathCount.numberValue; i++) { fieldTitle = headers.iterateNext().textContent.replace(/\s+/g, ''''); if (fieldTitle == "Auteur:" ) { fieldTitle = "Author:"; } else if (fieldTitle == "Titre:") { fieldTitle = "Title:"; } else if (fieldTitle == "Description:") { fieldTitle = "Extent:"; } else if (fieldTitle == "├ëditeur:") { fieldTitle = "Published:"; } else if (fieldTitle == "Sujet:") { fieldTitle = "Subjects:"; } dataTags[fieldTitle] = (contents.iterateNext().textContent.replace(/^\s*|\s*$/g, '''')); } //author var multiAuthors = 0; if (dataTags["Author:"]) { var author = dataTags["Author:"]; if (author.match("; ")) { var authors = author.split("; "); multiAuthors = 1; } if (multiAuthors == 1) { for (var i = 0; i < authors.length; i++) { if (authors[i].match(", ")) { var author1 = authors[i].split(", "); author = author1[1] + " " + author1[0]; newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author")); } else { newItem.creators.push({lastName: author, creatorType: "creator"}); } } } else { if (author.match(", ")) { var author1 = author.split(", "); author = author1[1] + " " + author1[0]; newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author")); } else { newItem.creators.push({lastName: author, creatorType: "creator"}); } } } if (dataTags["Published:"]) { if (dataTags["Published:"].match(": ")) { var place1 = dataTags["Published:"].indexOf(": "); newItem.place = dataTags["Published:"].substr(0, place1); var publisher1 = dataTags["Published:"].substr(place1 + 2); if (publisher1.match(", ")) { var date1 = publisher1.lastIndexOf(", "); newItem.date = publisher1.substr(date1 +2); newItem.publisher = publisher1.substr(0, date1); } else { newItem.publisher = publisher1; } } else { newItem.publisher = publisher1; } } //for Tags if (dataTags["Subjects:"]) { tagsContent = dataTags["Subjects:"].split(/\n/); } var j = 0; for (var i = 0; i < tagsContent.length; i++) { if (tagsContent[i].match(/\w/)) { newItem.tags[j] = tagsContent[i].replace(/^\s*|\s+$/g, ''''); j++; } } associateData (newItem, dataTags, "Extent:", "pages"); associateData (newItem, dataTags, "ID:", "callNumber"); associateData (newItem, dataTags, "Notes:", "abstractNote"); newItem.title = doc.title; if (dataTags["Title:"]) { associateData (newItem, dataTags, "Title:", "title"); } else { newItem.title = "No Title Found: Champlain Collection"; } newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var titles = doc.evaluate(''//tr[1]/td[2]/font/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_title; while (next_title = titles.iterateNext()) { items[next_title.href] = next_title.textContent; } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('8451431a-895f-4732-8339-79eb6756d2f9', '1.0.0b4.r5', '', '2008-09-02 13:40:00', '0', '100', '4', 'Civilization.ca', 'Adam Crymble', 'http://collections.civilization.ca', 'function detectWeb(doc, url) { if (doc.evaluate(''//tr/td[2]/a/font'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else if (doc.location.href.match("Display.php")) { return "artwork"; } }', '//Civilization.ca translator. Code by Adam Crymble. function associateData (newItem, dataTags, field, zoteroField) { if (dataTags[field]) { newItem[zoteroField] = dataTags[field]; } } function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var dataTags = new Object(); var tagsContent = new Array(); var fieldTitle; var newItem = new Zotero.Item("artwork"); var headers = doc.evaluate(''//table[2]/tbody/tr/td[1]/span[@class="textb"]/b'', doc, nsResolver, XPathResult.ANY_TYPE, null); var contents = doc.evaluate(''//tr[2]/td/table[2]/tbody/tr/td[2]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathCount = doc.evaluate(''count (//table[2]/tbody/tr/td[1]/span[@class="textb"]/b)'', doc, nsResolver, XPathResult.ANY_TYPE, null); newItem.title = contents.iterateNext().textContent.replace(/^\s*|\s+$/g, ''''); var dump = contents.iterateNext(); for (i=0; i<xPathCount.numberValue; i++) { fieldTitle = headers.iterateNext().textContent.replace(/\s+/g, ''''); if (fieldTitle == "Artist/Maker/Manufacturer") { fieldTitle = " Artiste/Artisan/Fabricant"; } else if (fieldTitle == "Autreaffiliationculturelle") { fieldTitle = "OtherCulturalAffiliation"; } dataTags[fieldTitle] = Zotero.Utilities.cleanTags(contents.iterateNext().textContent.replace(/^\s*|\s*$/g, '''')); } if (dataTags["Artist/Maker/Manufacturer"]) { var author = dataTags["Artist/Maker/Manufacturer"]; if (author.match(" and ")) { var authors = author.split(" and "); for (var i in authors) { newItem.creators.push(Zotero.Utilities.cleanAuthor(authors[i], "author")); } } else { newItem.creators.push({lastName: author, creatorType: "creator"}); } } if (dataTags["OtherCulturalAffiliation"]) { tagsContent = dataTags["OtherCulturalAffiliation"].split(/\n/); for (var i = 0; i < tagsContent.length; i++) { newItem.tags[i] = tagsContent[i]; } } if (dataTags["Collection"]) { newItem.extra = "Collection: " + dataTags[''Collection'']; } associateData (newItem, dataTags, "ArtifactNumber", "callNumber"); associateData (newItem, dataTags, "Museum", "repository"); associateData (newItem, dataTags, "Measurements", "artworkSize"); associateData (newItem, dataTags, "BeginDate", "date"); associateData (newItem, dataTags, "EndDate", "date"); associateData (newItem, dataTags, "AdditionalInformation", "abstractNote"); associateData (newItem, dataTags, "Num├⌐rod''artefact", "callNumber"); associateData (newItem, dataTags, "Mus├⌐e", "repository"); associateData (newItem, dataTags, "Mesures", "artworkSize"); associateData (newItem, dataTags, "Dateded├⌐but", "date"); associateData (newItem, dataTags, "Datedefin", "date"); associateData (newItem, dataTags, "Informationsuppl├⌐mentaire", "abstractNote"); newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var titles = doc.evaluate(''//tr/td[2]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_title; while (next_title = titles.iterateNext()) { if (next_title.textContent.match(/\w/)) { items[next_title.href] = next_title.textContent; } } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('625c6435-e235-4402-a48f-3095a9c1a09c', '1.0.0b4.r5', '', '2008-09-02 13:40:00', '0', '100', '4', 'DBLP Computer Science Bibliography', 'Adam Crymble', 'http://(search?|dblp?).mpi-inf', 'function detectWeb(doc, url) { if (doc.title.match("journals")) { return "journalArticle"; } else if (doc.title.match("conf")) { return "conferencePaper"; } else if (doc.title.match("DBLP entry")) { return "bookSection"; } } ', '//DBLP Computer Science Database Translator. Code by Adam Crymble. //Doesn''t work for multiple entries. Site uses a different URL for the search and single entry. Multiple code attached as comment. function associateData (newItem, dataTags, field, zoteroField) { if (dataTags[field]) { newItem[zoteroField] = dataTags[field]; } } function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { } : null; var dataTags = new Object(); var mediaType = detectWeb(doc, url); if (mediaType == "bookSection") { var newItem = new Zotero.Item("bookSection"); } else if (mediaType == "conferencePaper") { var newItem = new Zotero.Item("conferencePaper"); } else if (mediaType == "journalArticle") { var newItem = new Zotero.Item("journalArticle"); } var xPathAllData = doc.evaluate(''//pre'', doc, nsResolver, XPathResult.ANY_TYPE, null); var allData = xPathAllData.iterateNext().textContent.split("},"); var cleanFirstEntry = allData[0].indexOf(","); allData[0] = allData[0].substr(cleanFirstEntry); var headers = new Array(); var content = new Array(); var splitAllData; for (var i = 0; i < allData.length-2; i++) { splitAllData = allData[i].split("="); headers.push(splitAllData[0].replace(/^\s*|\s*$|\W*/g, '''')); content.push(splitAllData[1].replace(/^\s*|\s*$|\{*/g, '''')); fieldTitle = headers[i].replace(",", ''''); if (fieldTitle == "author") { var authors = content[i].split("and"); for (var j =0; j<authors.length; j++) { newItem.creators.push(Zotero.Utilities.cleanAuthor(authors[j], "author")); } } else if (fieldTitle == "editor") { var editors = content[i].split("and"); for (var j =0; j<editors.length; j++) { newItem.creators.push(Zotero.Utilities.cleanAuthor(editors[j], "editor")); } } else { dataTags[fieldTitle] = content[i]; } } if (mediaType == "conferencePaper") { associateData (newItem, dataTags, "booktitle", "conferenceName"); } else { associateData (newItem, dataTags, "booktitle", "bookTitle"); } newItem.url = doc.location.href; associateData (newItem, dataTags, "year", "date"); associateData (newItem, dataTags, "pages", "pages"); associateData (newItem, dataTags, "title", "title"); associateData (newItem, dataTags, "publisher", "publisher"); associateData (newItem, dataTags, "volume", "volume"); associateData (newItem, dataTags, "isbn", "ISBN"); associateData (newItem, dataTags, "series", "series"); associateData (newItem, dataTags, "journal", "publicationTitle"); associateData (newItem, dataTags, "number", "issue"); newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); /* Multiple code doesn''t work due to Permission denied to get property HTMLDocument.documentElement error. if (detectWeb(doc, url) == "multiple") { var items = new Object(); //newer interface xPaths if (doc.title.match("DEMO")) { var titles = doc.evaluate(''//a/font'', doc, nsResolver, XPathResult.ANY_TYPE, null); var links = doc.evaluate(''//dt/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_title; while (next_title = titles.iterateNext()) { items[links.iterateNext().href] = next_title.textContent; } //older interface xPaths } else { var titles = doc.evaluate(''//td[3]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var links = doc.evaluate(''//td[1]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_title; var split1; var split2; while (next_title = titles.iterateNext()) { split1 = next_title.textContent.indexOf(":"); var title = next_title.textContent.substr(split1+2); split2 = title.indexOf("."); title = title.substr(0, split2); items[links.iterateNext().href] = title; } } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { */ articles = [url]; //} Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('00ce0d68-9205-40e6-91f4-c96f7ab296c2', '1.0.0b4.r5', '', '2008-09-02 13:40:00', '0', '100', '4', 'Eighteenth Century Collections Online', 'Adam Crymble', 'http://galenet.galegroup.com', 'function detectWeb(doc, url) { if (doc.evaluate(''//td[2][@class="stnd"]/a/i/b'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else if (doc.evaluate(''//td[3]/span[@class="stnd"]/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "bookSection"; } else if (doc.evaluate(''//span[@class="stnd"]/b'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "book"; } } ', '//Eighteenth Century Collections Online translator. Code by Adam Crymble function associateData (newItem, dataTags, field, zoteroField) { if (dataTags[field]) { newItem[zoteroField] = dataTags[field]; } } function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var dataTags = new Object(); var tagsContent = new Array(); var fieldTitle; var newItem = new Zotero.Item("book"); var headers = doc.evaluate(''//td[1][@class="stnd"]/b'', doc, nsResolver, XPathResult.ANY_TYPE, null); var contents = doc.evaluate(''//td[2][@class="stnd"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); while (fieldTitle = headers.iterateNext()) { fieldTitle = fieldTitle.textContent.replace(/\s+/g, ''''); fieldContent = contents.iterateNext().textContent; while (fieldContent.length<2) { if (fieldContent.match(/\d/)) { break; } else { fieldContent = contents.iterateNext().textContent; } } dataTags[fieldTitle] = fieldContent.replace(/^\s*|\s*$/g, ''''); } if (dataTags["Author"]) { if (dataTags["Author"].match(/\n/)) { var author = dataTags["Author"].split(/\n/); dataTags["Author"] = author[0]; } if (dataTags["Author"].match(", ")) { var author = dataTags["Author"].split(", "); author = author[1] + " " + author[0]; newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author")); } else { newItem.creators.push(Zotero.Utilities.cleanAuthor(dataTags["Author"], "author")); } } if (dataTags["GaleDocumentNumber"]) { newItem.extra = "Gale Document Number: " + dataTags["GaleDocumentNumber"]; } if (dataTags["18thCenturyMicrofilmReel#"]) { newItem.locInArchive = "18th Century Microfilm Reel #: " + dataTags["18thCenturyMicrofilmReel#"]; } if (dataTags["Imprint"]) { if (dataTags["Imprint"].match(": ")) { var place1 = dataTags["Imprint"].split(": "); newItem.place = place1[0]; if (place1[1].match(", ")) { var pub1 = place1[1].split(", "); newItem.publisher = pub1[0]; newItem.date = pub1[1]; } else { newItem.publisher = place1[1]; } } else { newItem.publisher = dataTags["Imprint"]; } } associateData (newItem, dataTags, "Title", "title"); associateData (newItem, dataTags, "Language", "language"); associateData (newItem, dataTags, "Pages", "page"); associateData (newItem, dataTags, "SourceLibrary", "repository"); associateData (newItem, dataTags, "Volume", "volume"); associateData (newItem, dataTags, "Notes", "abstractNote"); newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var items = new Object(); var articles1 = new Array(); if (detectWeb(doc, url) == "multiple") { var titles = doc.evaluate(''//td[2][@class="stnd"]/a/i/b'', doc, nsResolver, XPathResult.ANY_TYPE, null); var links = doc.evaluate(''//td[2][@class="stnd"]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_title; while (next_title = titles.iterateNext()) { var link = links.iterateNext(); while (link.textContent!="Full Citation") { link = links.iterateNext(); } items[link.href] = next_title.textContent; } items = Zotero.selectItems(items); for (var i in items) { articles1.push(i); } } else if (detectWeb(doc, url) == "bookSection") { var links = doc.evaluate(''//td[3]/span[@class="stnd"]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var articles = links.iterateNext(); Zotero.debug(articles); articles1.push(articles.href); } else { articles1 = [url]; } Zotero.Utilities.processDocuments(articles1, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('879d738c-bbdd-4fa0-afce-63295764d3b7', '1.0.0b4.r5', '', '2008-09-02 13:40:00', '0', '100', '4', 'FreePatentsOnline', 'Adam Crymble', 'http://www.freepatentsonline.com', 'function detectWeb(doc, url) { if (doc.location.href.match("result.html")) { return "multiple"; } else if (doc.evaluate(''//div[@class="disp_doc2"]/div'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "patent"; } }', 'function associateData (newItem, dataTags, field, zoteroField) { if (dataTags[field]) { newItem[zoteroField] = dataTags[field]; } } function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var dataTags = new Object(); var fieldTitle; var contents; var newItem = new Zotero.Item("patent"); var pageContent = doc.evaluate(''//div[@class="disp_doc2"]/div'', doc, null, XPathResult.ANY_TYPE, null); var xPathCount = doc.evaluate(''count (//div[@class="disp_doc2"]/div)'', doc, null, XPathResult.ANY_TYPE, null); for (i=0; i<xPathCount.numberValue/2; i++) { fieldTitle = pageContent.iterateNext().textContent.replace(/\s+/g, ''''); content = pageContent.iterateNext().textContent.replace(/^\s*|\s*$/g, ''''); dataTags[fieldTitle] = (content); } var inventors = new Array(); var parenthesis; if (dataTags["Inventors:"]) { inventors = dataTags["Inventors:"].split(/\n/); if (inventors.length>1) { for (var i = 0; i < inventors.length; i++) { parenthesis = inventors[i].indexOf("("); inventors[i] = inventors[i].substr(0, parenthesis).replace(/^\s*|\s*$/g, ''''); if (inventors[i].match(", ")) { var inventors1 = inventors[i].split(", "); inventors[i] = inventors1[1] + " " + inventors1[0]; newItem.creators.push(Zotero.Utilities.cleanAuthor(inventors[i], "inventor")); } else { newItem.creators.push(Zotero.Utilities.cleanAuthor(inventors[i], "inventor")); } } } else { Zotero.debug(doc.title); parenthesis = dataTags["Inventors:"].indexOf("("); dataTags["Inventors:"] = dataTags["Inventors:"].substr(0, parenthesis).replace(/^\s*|\s*$/g, ''''); if (dataTags["Inventors:"].match(", ")) { var inventors1 = dataTags["Inventors:"].split(", "); dataTags["Inventors:"] = inventors1[1] + " " + inventors1[0]; newItem.creators.push(Zotero.Utilities.cleanAuthor(dataTags["Inventors:"], "inventor")); } else { newItem.creators.push(Zotero.Utilities.cleanAuthor(dataTags["Inventors:"], "inventor")); } } } associateData (newItem, dataTags, "Title:", "title"); associateData (newItem, dataTags, "Abstract:", "abstract"); associateData (newItem, dataTags, "DocumentTypeandNumber:", "patentNumber"); associateData (newItem, dataTags, "ApplicationNumber:", "applicationNumber"); associateData (newItem, dataTags, "PublicationDate:", "issueDate"); associateData (newItem, dataTags, "Assignee:", "assignee"); newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var titles = doc.evaluate(''//table[@class="listing_table"]/tbody/tr/td[3]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_title; while (next_title = titles.iterateNext()) { items[next_title.href] = next_title.textContent; } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('4ea89035-3dc4-4ae3-b22d-726bc0d83a64', '1.0.0b4.r5', '', '2008-07-24 05:30:00', '0', '100', '4', 'Gale - Cengage Learning', 'Adam Crymble', 'http://www.gale.cengage.com', 'function detectWeb(doc, url) { if (doc.evaluate(''//td[3]/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else if (doc.evaluate(''//div[@id="title_main"]/h2'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "book"; } }', '//Gale Cengage Learning - Catalog translator. Code by Adam Crymble. function associateData (newItem, dataTags, field, zoteroField) { if (dataTags[field]) { newItem[zoteroField] = dataTags[field]; } } function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var dataTags = new Object(); var titles1; var newItem = new Zotero.Item("book"); var credits = doc.evaluate(''//div[@id="credits"]/ul/li'', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathCount = doc.evaluate(''count (//div[@id="credits"]/ul/li)'', doc, nsResolver, XPathResult.ANY_TYPE, null); var creditsArray = new Array(); for (var i = 0; i < xPathCount.numberValue; i++) { creditsArray.push(credits.iterateNext().textContent.replace(/^\s*|\s*$/g, '''')); } if (doc.evaluate(''//div[@id="title_main"]/h2'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { titles1 = doc.evaluate(''//div[@id="title_main"]/h2'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.replace(/^\s*|\s*$/g, ''''); } if (titles1.match(/\w/) && creditsArray[0].match(/\w/)) { newItem.title = titles1 + ": " + creditsArray[0]; } else if (titles1.match(/\w/) && !creditsArray[0].match(/\w/)) { newItem.title = titles1; } else { newItem.title = "No Title Found." } for (var i = 1; i < creditsArray.length; i++) { if (creditsArray[i].match("Author ")) { var author = creditsArray[i].split("Author "); author = author[1]; newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author")); } else if (creditsArray[i].match("Published by ")) { var publisher1 = creditsArray[i].split("Published by "); newItem.publisher = publisher1[1]; } else if (creditsArray[i].match("Volume")) { var volume1 = creditsArray[i].split("Volume"); newItem.volume = volume1[1]; } } if (doc.evaluate(''//div[@id="description"]/p'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { newItem.abstractNote = doc.evaluate(''//div[@id="description"]/p'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; } var pageContents = doc.evaluate(''//div[@id="detail"]/ul/li'', doc, nsResolver, XPathResult.ANY_TYPE, null); var allContents = new Array(); var contents; var fieldTitle; while (contents = pageContents.iterateNext()) { allContents.push(contents.textContent); } for (i=0; i<allContents.length; i++) { if (allContents[i].match(":")) { contents = allContents[i].split(":"); fieldTitle = contents[0].replace(/\s*/g, ''''); dataTags[fieldTitle] = contents[1]; } } associateData (newItem, dataTags, "ISBN10", "ISBN"); if (dataTags["ISBN13"]) { newItem.extra = "ISBN 13: " + dataTags["ISBN13"]; } associateData (newItem, dataTags, "Published/Released", "date"); newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var titles = doc.evaluate(''//td[3]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_title; while (next_title = titles.iterateNext()) { items[next_title.href] = next_title.textContent; } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('f87c10fe-2bdc-4e1e-aedd-7fd20ec4b4c2', '1.0.0b4.r5', '', '2008-08-21 15:45:00', '0', '100', '4', 'Getty Research Library Catalog', 'Adam Crymble', 'http://(opac.pub|library).getty.edu', 'function detectWeb(doc, url) { var multiCheck = ''''; if (doc.evaluate(''//table/tbody/tr/td[1]/b'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { multiCheck = doc.evaluate(''//table/tbody/tr/td[1]/b'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent; } var callNumSearch = ''''; if (doc.evaluate(''//table/tbody/tr/th[2]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { callNumSearch = doc.evaluate(''//table/tbody/tr/th[2]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent; } if (callNumSearch.match("Call Number")) { return "multiple"; } if (multiCheck.match("Sort by:")) { return "multiple"; } if (doc.evaluate(''//table[2]/tbody/tr/th'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent.match("Author:")) { return "book"; } else if (doc.evaluate(''//tr/th/font/b'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "book"; } else if (doc.evaluate(''//tr/th/b'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "book"; } }', '//Getty Research Library Catalog translator. Code by Adam Crymble function associateData (newItem, dataTags, field, zoteroField) { if (dataTags[field]) { newItem[zoteroField] = dataTags[field]; } } function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var dataTags = new Object(); var fieldContent = new Array(); var fieldExtra = new Array(); var tagsContent = new Array(); var multis = new Array(); var content1; var extra1; var multi1; var newItem = new Zotero.Item("book"); var multiLineEntry = doc.evaluate(''//table[2]/tbody/tr/td[2]'', doc, nsResolver, XPathResult.ANY_TYPE, null); while (multi1 = multiLineEntry.iterateNext()) { multis.push(multi1.textContent); } //Puts field Content into an array var contents = doc.evaluate(''//table[2]/tbody/tr/td'', doc, nsResolver, XPathResult.ANY_TYPE, null); while (content1 = contents.iterateNext()) { if (content1.textContent.match(/\w/)) { fieldContent.push(content1.textContent.replace(/^\s*|\s*&/g, '''')); } } //Entries that do not line up perfectly with a field heading are put into an array and these are then removed from the field Content array. var extraField = doc.evaluate(''//table[2]/tbody/tr/td[2]'', doc, nsResolver, XPathResult.ANY_TYPE, null); while (extra1 = extraField.iterateNext()) { if (extra1.textContent.match(/\w/)) { fieldExtra.push(extra1.textContent.replace(/^\s*|\s*&/g, '''')); } } var duplicates = new Array(); for (var i = 0; i < fieldContent.length; i++) { for (var j = 0; j < fieldExtra.length; j++) { if (fieldContent[i] == fieldExtra[j]) { duplicates.push(i); } } } var cleanContent = new Array(); for (var i = duplicates.length-1; i > -1; i --) { fieldContent[duplicates[i]-1] = fieldContent[duplicates[i]-1] + "; " + fieldContent[duplicates[i]]; fieldContent[duplicates[i]] = ''''; } for (var i = 0; i < fieldContent.length-1; i++) { if (fieldContent[i].match(/\w/)) { cleanContent.push(fieldContent[i]); } } var headers = doc.evaluate(''//form/table/tbody/tr/th'', doc, nsResolver, XPathResult.ANY_TYPE, null); //field title and cleancontent have the same number of entries; These are then associated and put into dataTags object. for (var i = 0; i < cleanContent.length; i++) { fieldTitle = headers.iterateNext().textContent.replace(/\s+/g, ''''); if (fieldTitle.match(/\w/)) { } else { fieldTitle = headers.iterateNext().textContent.replace(/\s+/g, ''''); } dataTags[fieldTitle] = cleanContent[i]; } //The data is all now in the dataTags object. It needs only to be formatted and put in the proper Zotero fields. //fixing up any content that needs a different format for Zotero and then pushing it into Zotero. if (dataTags["Notes:"]) { if (dataTags["Notes:"].match("; ")) { var notes1 = dataTags["Notes:"].split("; "); var notes2 = ''''; for (var i = 0; i < notes1.length; i++) { if (notes2.match(/\w/)) { notes2 = notes2 + "; " + notes1[i]; } else { notes2 = notes1[i]; } } dataTags["Notes:"] = notes2; } } if (dataTags["Subjects:"]) { if (dataTags["Subjects:"].match("; ")) { tagsContent = dataTags["Subjects:"].split("; "); } else { newItem.tags = dataTags["Subjects:"]; var noMoreTags = 1; } if (noMoreTags != 1) { for (var i = 0; i < tagsContent.length; i++) { newItem.tags[i] = tagsContent[i]; } } } if (dataTags["Author:"]) { if (dataTags["Author:"].match(", ")) { var author = dataTags["Author:"].split('', ''); author = author[1].substr(0, author[1].length) + " " + author[0]; author = author.replace(/\./, ''''); newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author")); } } if (dataTags["CorporateAuthor:"]) { newItem.creators.push({lastName: dataTags["CorporateAuthor:"], creatorType: "creator"}); } if (dataTags["Location:"]) { newItem.extra = "Location in Library: " + " " + dataTags["Location:"]; } if (dataTags["PersistentLinkforthisRecord:"]) { associateData (newItem, dataTags, "PersistentLinkforthisRecord:", "url"); } else { newItem.url = doc.location.href; } //Publishing info is split in a best guess format. //If not all of Place, Publisher and Date are present, or they are in an unstandard format, the information is stored in Publisher. if (dataTags["PublicationInformation:"]) { if (dataTags["PublicationInformation:"].match(": ")) { var colon = dataTags["PublicationInformation:"].indexOf(":"); var place1 = dataTags["PublicationInformation:"].substr(0, colon); newItem.place = place1; var publisher1 = dataTags["PublicationInformation:"].substr(colon); if (publisher1.match(", ")) { var date1 = publisher1.split(", "); newItem.publisher = date1[0]; if (date1[1].match(/\d/)) { newItem.date = date1[1]; } } else { newItem.date = publisher1; } } else { newItem.publisher = dataTags["PublicationInformation:"]; } } associateData (newItem, dataTags, "Title:", "title"); associateData (newItem, dataTags, "Series:", "series"); associateData (newItem, dataTags, "Description:", "description"); associateData (newItem, dataTags, "ISBN:", "ISBN"); associateData (newItem, dataTags, "Notes:", "abstractNote"); associateData (newItem, dataTags, "CallNumber:", "callNumber"); associateData (newItem, dataTags, "Edition:", "edition"); newItem.notes.push({title:"Title", note:"Site is designed to timeout user. This may prevent Zotero from saving a screen capture."}); newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var typeOfPage = doc.evaluate(''//table/tbody/tr/th[3]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; Zotero.debug(typeOfPage); if (typeOfPage.match("Title")) { var titles = doc.evaluate(''//table/tbody/tr/td[3]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); } else { var titles = doc.evaluate(''//table[2]/tbody/tr/td[2]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); } var next_title; while (next_title = titles.iterateNext()) { items[next_title.href] = next_title.textContent; } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('330f283f-12e9-4421-aa59-e17ec5f4aa37', '1.0.0b4.r5', '', '2008-08-21 15:45:00', '0', '100', '4', 'Glenbow Library', 'Adam Crymble', 'http://ww2.glenbow.org/', 'function detectWeb(doc, url) { if (doc.title.match("Library Main Catalogue Search Results") && doc.location.href.match("GET_RECORD")) { return "book"; } else if (doc.title.match("Library Map Collection Search Results") && doc.location.href.match("GET_RECORD")) { return "map"; } else if (doc.title.match("Library Main Catalogue Search Results") && !(doc.location.href.match("GET_RECORD"))) { return "multiple"; } else if (doc.title.match("Map Collection Search Results") && !(doc.location.href.match("GET_RECORD"))) { return "multiple"; } }', '//Translator for the Glenbow Museum Collection. Code by Adam Crymble //Only works for Library Main Catalogue and Map Collection. The other categories do not have stable URLs for individual entries. function associateContent (newItem, dataTags, field, zoteroField) { if (dataTags[field]) { newItem[zoteroField] = dataTags[field]; } } function scrape (doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { } : null; var fieldTitle = new Array(); var tagsContent = new Array(); if (detectWeb(doc, url) == "book") { newItem = new Zotero.Item("book"); authorType= "author"; } else if (detectWeb(doc, url) == "map") { newItem = new Zotero.Item("map"); authorType= "cartographer"; } var dataTags= new Object(); var authorType; var organizeName; if (doc.evaluate(''//tr/td/p'', doc, nsResolver, XPathResult.ANY_TYPE, null)) { var xPathContent = doc.evaluate(''//tr/td/p'', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathCount = doc.evaluate(''count (//tr/td/p)'', doc, nsResolver, XPathResult.ANY_TYPE, null); for (var i = 0; i < xPathCount.numberValue; i++) { fieldTitle= xPathContent.iterateNext().textContent; var separate = fieldTitle.indexOf(":"); var fieldTitle1 = fieldTitle.substr(0, separate); fieldTitle1 = fieldTitle1.replace(/\s+/g, ''''); var fieldContent = fieldTitle.substr(separate + 2); dataTags[fieldTitle1] = (fieldContent); } //names start if (dataTags["Names"]) { //if there are multiple authors: if (dataTags["Names"].match("\n")) { var multipleNames = dataTags["Names"].split("\n"); for (j = 0; j < multipleNames.length; j++) { if (detectWeb(doc, url) == "book") { multipleNames[j] = multipleNames[j].substr(3); } else if (detectWeb(doc, url) == "map") { multipleNames[j] = multipleNames[j]; } if (multipleNames[j].match(/\,/)) { organizeName = multipleNames[j].split(","); organizeName = (organizeName[1] + (" ") + organizeName[0]); newItem.creators.push(Zotero.Utilities.cleanAuthor(organizeName, authorType)); } else { newItem.creators.push({lastName: multipleNames[j], creatorType: authorType}); } } //if there is 1 human author } else if (dataTags["Names"].match(/\,/)) { if (detectWeb(doc, url) == "book") { var organizeName = dataTags["Names"].substr(3).split(","); } else if (detectWeb(doc, url) == "map") { var organizeName = dataTags["Names"].split(","); } organizeName = (organizeName[1] + (" ") + organizeName[0]); newItem.creators.push(Zotero.Utilities.cleanAuthor(organizeName,authorType)); //if there is 1 corporate author } else { if (detectWeb(doc, url) == "book") { newItem.creators.push({lastName: dataTags["Names"].substr(3), creatorType: authorType}); } else if (detectWeb(doc, url) == "map") { newItem.creators.push({lastName: dataTags["Names"], creatorType: authorType}); } } } //tags start if (dataTags["Subjects"]) { if (dataTags["Subjects"].match("\n")) { var multipleSubjects= dataTags["Subjects"].split("\n"); for (j = 0; j < multipleSubjects.length; j++) { multipleSubjects[j] = multipleSubjects[j].substr(3); tagsContent.push(Zotero.Utilities.cleanTags(multipleSubjects[j])); } } else { dataTags["Subjects"] = dataTags["Subjects"].substr(3); tagsContent.push(Zotero.Utilities.cleanTags(dataTags["Subjects"])); } for (var y = 0; y < tagsContent.length; y++) { newItem.tags[y] = tagsContent[y]; } } //book publisher info start if (dataTags["PublishingInformation"]) { dataTags["PublishingInformation"] = dataTags["PublishingInformation"].replace(/\[|\]*/g, ''''); var pubLoc= dataTags["PublishingInformation"].split(":"); if (pubLoc[1]) { dataTags["Place"] = pubLoc[0]; var pubAndDate = pubLoc[1].split(","); dataTags["Publisher"] = pubAndDate[0]; dataTags["Date"] = pubAndDate[1]; } else { associateContent (newItem, dataTags, "PublishingInformation", "date"); } } //accession number start if (dataTags["Accessionnumber"]) { dataTags["Accessionnumber"] = ("Accession number: " + dataTags["Accessionnumber"]); } if (dataTags["CallNumber"]) { if (dataTags["CallNumber"] == '' '') { dataTags["CallNumber"] = "None"; Zotero.debug(dataTags["CallNumber"]); } } } associateContent (newItem, dataTags, "CallNumber", "callNumber"); associateContent (newItem, dataTags, "Title", "title"); associateContent (newItem, dataTags, "Place", "place"); associateContent (newItem, dataTags, "Publisher", "publisher"); associateContent (newItem, dataTags, "Date", "date"); associateContent (newItem, dataTags, "Description", "pages"); associateContent (newItem, dataTags, "Edition", "edition"); associateContent (newItem, dataTags, "Notes", "abstractNote"); associateContent (newItem, dataTags, "Accessionnumber", "extra"); associateContent (newItem, dataTags, "Scale", "scale"); newItem.url = doc.location.href; if (!newItem.title) newItem.title = "New Search Terms Suggested" newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); var dataTags = new Object(); var titleList = new Array(); var uris = new Array(); var next_title= new Array(); if (detectWeb(doc, url) == "multiple") { //checks multiple entries for a link to a single entry page. if (doc.evaluate(''//td/div[@class="floatRight"]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null)) { var items = new Object(); var titles = doc.evaluate(''//td/p'', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathMultiCount = doc.evaluate(''count (//td/p)'', doc, nsResolver, XPathResult.ANY_TYPE, null); for (var i = 0; i < xPathMultiCount.numberValue; i++) { articles= titles.iterateNext().textContent; var separateMulti = articles.indexOf(":"); var articles1 = articles.substr(0, separateMulti); articles1 = articles1.replace(/\s+/g, ''''); var multiContent = articles.substr(separateMulti + 2); dataTags[articles1] = (multiContent); if (articles1 == "Title") { titleList.push(dataTags["Title"]); } if (articles1 == "See") { titleList.push("skip"); } } var links = doc.evaluate(''//td/div[@class="floatRight"]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathLinksCount = doc.evaluate(''count (//td/div[@class="floatRight"]/a)'', doc, nsResolver, XPathResult.ANY_TYPE, null); for (i=0; i<xPathLinksCount.numberValue; i++) { next_title.push(links.iterateNext().href); if (titleList[i] != "skip") { items[next_title] = titleList[i]; } } items = Zotero.selectItems(items); for (var i in items) { uris.push(i); } } //code if single entry only. } else { uris = [url]; } Zotero.Utilities.processDocuments(uris, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('e0234bcf-bc56-4577-aa94-fe86a27f6fd6', '1.0.0b4.r5', '', '2008-08-04 07:10:00', '0', '100', '4', 'The Globe and Mail', 'Adam Crymble', 'http://www.theglobeandmail.com', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var metaTags = new Object(); var metaTagHTML = doc.getElementsByTagName("meta"); for (var i = 0 ; i < metaTagHTML.length ; i++) { metaTags[metaTagHTML[i].getAttribute("name")] = Zotero.Utilities.cleanTags(metaTagHTML[i].getAttribute("content")); } if (doc.evaluate(''//div[@id="header"]/h2/a/img'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var printEdition1 = doc.evaluate(''//div[@id="header"]/h2/a/img'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().src; if (printEdition1.match("printedition")) { return "newspaperArticle"; } } if (doc.evaluate(''//p[@id="continueReading"]/strong'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var payPerView = doc.evaluate(''//p[@id="continueReading"]/strong'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; if (payPerView == "purchase this article") { return "newspaperArticle"; } } if (metaTags["article_id"]) { return "newspaperArticle"; } else if (doc.title.match(''globeandmail.com: Search'')) { return "multiple"; } if (doc.evaluate(''//ul[@id="utility"]/li[@class="email"]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var blogCheck = doc.evaluate(''//ul[@id="utility"]/li[@class="email"]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var blogCheck1 = blogCheck.iterateNext().textContent; if (blogCheck1.match("blog")) { if (doc.location.href.match("story")) { return "blogPost"; } } } }', '//Translator for the Globe and Mail newspaper: code by Adam Crymble function associateMeta (newItem, metaTags, field, zoteroField) { if (metaTags[field]) { newItem[zoteroField] = metaTags[field]; } } function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; if (detectWeb(doc, url) == "blogPost") { var newItem = new Zotero.Item("blogPost"); var title = doc.evaluate(''//div[@id="headline"]/h2'', doc, nsResolver, XPathResult.ANY_TYPE, null); newItem.title = title.iterateNext().textContent; var blogger = doc.evaluate(''//div[@id="author"]/p'', doc, nsResolver, XPathResult.ANY_TYPE, null); var bloggerName = blogger.iterateNext().textContent.replace(/^\s*|\s*$/g, ''''); var bloggerName1 = bloggerName.split(","); newItem.creators.push(Zotero.Utilities.cleanAuthor(bloggerName1[0], "author")); } var noMetaType = 0; if (detectWeb(doc, url) == "newspaperArticle") { var newItem = new Zotero.Item("newspaperArticle"); //checks if the article is from the "Print Edition" which doesn''t contain meta data. if (doc.evaluate(''//div[@id="header"]/h2/a/img'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var printEdition1 = doc.evaluate(''//div[@id="header"]/h2/a/img'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().src; if (printEdition1.match("printedition")) { noMetaType = 1; if (doc.evaluate(''//div[@id="author"]/p[@class="article-date"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { newItem.date= doc.evaluate(''//div[@id="author"]/p[@class="article-date"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; } } } //checks if the article is a Pay per view article. if (doc.evaluate(''//p[@id="continueReading"]/strong'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var payPerView = doc.evaluate(''//p[@id="continueReading"]/strong'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; if (payPerView == "purchase this article") { noMetaType = 1; } } //format for the "Print Edition" and "Pay per view" articles if (noMetaType = 1) { noMetaType = 1; if (doc.evaluate(''//div[@id="headline"]/h2'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { newItem.title = doc.evaluate(''//div[@id="headline"]/h2'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; } if (doc.evaluate(''//div[@id="author"]/p[@class="byline"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var author = doc.evaluate(''//div[@id="author"]/p[@class="byline"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; } noMetaType = 0; } var metaTags = new Object(); var tagsContent = new Array(); //get data var metaTagHTML = doc.getElementsByTagName("meta"); for (var i = 0 ; i < metaTagHTML.length ; i++) { metaTags[metaTagHTML[i].getAttribute("name")] = Zotero.Utilities.cleanTags(metaTagHTML[i].getAttribute("content")); } //author if (metaTags["byline"]) { var author = metaTags["byline"]; } //date if (metaTags["pubdate"]) { var month = metaTags["pubdate"].substr(4, 2); var day = metaTags["pubdate"].substr(6, 2); var year = metaTags["pubdate"].substr(0, 4); newItem.date = (year + "-" + month + "-"+ day); } //tags if (metaTags["article_keywords"]) { tagsContent = metaTags["article_keywords"].split("; "); } for (var i = 0; i < tagsContent.length; i++) { if (tagsContent[i] != (" ") && tagsContent[i] != ("")) { newItem.tags[i] = tagsContent[i]; } } associateMeta (newItem, metaTags, "headline", "title"); associateMeta (newItem, metaTags, "summary", "abstractNote"); associateMeta (newItem, metaTags, "desk", "section"); associateMeta (newItem, metaTags, "article_id", "callNumber"); associateMeta (newItem, metaTags, "credit", "rights"); //rest of author (shared between both newspaperArticle types) if (author) { if (author.substr(0,3).toLowerCase() == "by ") { author= author.substr(3); } var authors = author.toLowerCase().split(" and "); for each(var author in authors) { var words = author.split(" "); for (var i in words) { if (words[i] != "") { words[i] = words[i][0].toUpperCase() + words[i].substr(1).toLowerCase(); } } author = words.join(" "); newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author")); } } } newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var next_title = new Array(); var titlesCount = doc.evaluate(''count (//h3[@class="storyLink"]/a)'', doc, nsResolver, XPathResult.ANY_TYPE, null); var titles = doc.evaluate(''//h3[@class="storyLink"]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); for (i=0; i < titlesCount.numberValue; i++) { next_title = titles.iterateNext(); if (next_title.href.match("story")) { items[next_title.href] = next_title.textContent; } } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('d71e9b6d-2baa-44ed-acb4-13fe2fe592c0', '1.0.0b4.r5', '', '2008-08-04 07:10:00', '0', '100', '4', 'Google Patents', 'Adam Crymble', 'http://www\.google.*/patents', 'function detectWeb(doc, url) { if (doc.location.href.match("Search")) { return "multiple"; } else if (doc.location.href.match("id")) { return "patent"; } }', '//Google Patents Translator. Code by Adam Crymble function associateData (newItem, dataTags, field, zoteroField) { if (dataTags[field]) { newItem[zoteroField] = dataTags[field]; } } function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var dataTags = new Object(); var headings = new Array(); var newItem = new Zotero.Item("patent"); //checks format type if (doc.location.href.match("printsec")) { var contents = doc.evaluate(''//table[@id="summarytable"]/tbody/tr[1]/td'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; var xPathHeadings = doc.evaluate(''//b'', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathCount = doc.evaluate(''count (//b)'', doc, nsResolver, XPathResult.ANY_TYPE, null); if (doc.evaluate(''//span[@class="addmd"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var author = doc.evaluate(''//span[@class="addmd"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "inventor")); } } else { var xPathHeadings = doc.evaluate(''//div[@class="patent_bibdata"]/p/b'', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathCount = doc.evaluate(''count (//div[@class="patent_bibdata"]/p/b)'', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathContents = doc.evaluate(''//div[@class="patent_bibdata"]/p'', doc, nsResolver, XPathResult.ANY_TYPE, null); var contentsCount = doc.evaluate(''count (//div[@class="patent_bibdata"]/p)'', doc, nsResolver, XPathResult.ANY_TYPE, null); var contents; for (i = 0; i < contentsCount.numberValue; i++) { contents = (contents + xPathContents.iterateNext().textContent + " "); } if (doc.evaluate(''//td[3]/p'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { newItem.abstractNote = (doc.evaluate(''//td[3]/p'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.replace("Abstract", '''')); } } for (var i =0; i < xPathCount.numberValue; i++) { headings.push(xPathHeadings.iterateNext().textContent); contents = contents.replace(headings[i], "xxx"); } var splitContent = new Array(); splitContent = contents.split(/xxx/); //associate headings with contents. for (var i = 0; i < headings.length; i++) { fieldTitle = headings[i].replace(/\s+|\W*/g, ''''); if (fieldTitle == "USClassification" | fieldTitle == "InternationalClassification" | fieldTitle == "Abstract") { dataTags[fieldTitle] = splitContent[i+1]; } else { dataTags[fieldTitle] = splitContent[i+1].replace(": ", ''''); } if (dataTags[fieldTitle].match("About this patent")) { dataTags[fieldTitle] = dataTags[fieldTitle].replace("About this patent", ''''); } //author(s) if (fieldTitle == "Inventors") { var authors = dataTags[fieldTitle].split(", "); for (var j = 0; j < authors.length; j++) { newItem.creators.push(Zotero.Utilities.cleanAuthor(authors[j], "inventor")); } } else if (fieldTitle == "Inventor") { newItem.creators.push(Zotero.Utilities.cleanAuthor(dataTags["Inventor"], "inventor")); } } //extra field if (dataTags["USClassification"] && dataTags["InternationalClassification"]) { Zotero.debug(doc.title); newItem.extra = ("U.S. Classification: " + dataTags["USClassification"] + "; International Classification: " + dataTags["InternationalClassification"]); } else if (dataTags["USClassification"] ) { newItem.extra = ("U.S. Classification: " + dataTags["USClassification"]); } else if (dataTags["InternationalClassification"]) { newItem.extra = ("International Classification: " + dataTags["InternationalClassification"]); } associateData (newItem, dataTags, "Patentnumber", "patentNumber"); associateData (newItem, dataTags, "Issuedate", "date"); associateData (newItem, dataTags, "Assignees", "assignee"); associateData (newItem, dataTags, "Assignee", "assignee"); associateData (newItem, dataTags, "Abstract", "abstractNote"); associateData (newItem, dataTags, "Applicationnumber", "applicationNumber"); newItem.title = doc.evaluate(''//h2[@class="title"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var xPathFirstTitle = doc.evaluate(''//div[@id="results_container"]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var firstTitle = xPathFirstTitle.iterateNext(); var titles = doc.evaluate(''//p/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); items[firstTitle.href] = firstTitle.textContent; var next_title; while (next_title = titles.iterateNext()) { if (next_title.textContent.match("RSS feed")) { } else { items[next_title.href] = next_title.textContent; } } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); } '); REPLACE INTO translators VALUES ('c41c9c66-8540-4216-b138-7c00532748c9', '1.0.0b4.r5', '', '2008-08-04 07:10:00', '0', '100', '4', 'Gulag: Many Days, Many Lives', 'Adam Crymble', 'http://gulaghistory.org', 'function detectWeb(doc, url) { if (doc.evaluate(''//div[@class="field"][@id="citation"]/p'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "book"; } else if (doc.evaluate(''//h3/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } }', '//Gulag: Many Days, Many Lives translator; Code by Adam Crymble function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var newItem = new Zotero.Item("book"); if (doc.evaluate(''//div[@class="field"][@id="description"]/div'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var abstract1 = doc.evaluate(''//div[@class="field"][@id="description"]/div'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; newItem.abstractNote = abstract1.replace(/^\s+|\s*$/g, ''''); } if (doc.evaluate(''//div[@class="field"][@id="source"]/p'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var rights1 = doc.evaluate(''//div[@class="field"][@id="source"]/p'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; newItem.rights = rights1.replace(/^\s+|\s*$/g, ''''); } var cite = doc.evaluate(''//div[@class="field"][@id="citation"]/p'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; var checkForAuthor = cite.indexOf(''"''); if (cite.match("Gulag: Many Days, Many Lives")) { var split1 = new Array(); var split2 = new Array(); var split3 = new Array(); var split4 = new Array(); var split5 = new Array(); if (checkForAuthor == 0) { split1[1] = cite; } else { //author split1 = cite.split('', "''); var authorWords = split1[0].split(/\b\s/); if (authorWords.length > 3) { newItem.creators.push({lastName: split1[0], creatorType: "creator"}); } else { newItem.creators.push(Zotero.Utilities.cleanAuthor(split1[0], "author")); } } //title split2 = split1[1].split(''." ''); newItem.title = split2[0]; //repository split3 = split2[1].split("Lives, "); //object number split4 = split3[1].split(" ("); newItem.callNumber = split4[0]; //date posted and URL split5 = split4[1].split(")<"); newItem.date = split5[0]; } else { var split1 = cite.split(". "); Zotero.debug(split1); //author var author = split1[0].split(/\, /); author = author[1] + '' '' + author[0]; Zotero.debug(author); newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author")); //title newItem.title = split1[1]; //place var place1 = split1[2].split(":"); newItem.place = place1[0]; //date var date1 = split1[2].split (", "); newItem.date = date1[1]; //publisher newItem.publisher = date1[0].replace(place1[0], '''').substr(2); } newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var titles = doc.evaluate(''//h3/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_title; while (next_title = titles.iterateNext()) { items[next_title.href] = next_title.textContent; } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('c9338ed5-b512-4967-8ffe-ab9c973559ef', '1.0.0b4.r5', '', '2008-08-04 07:10:00', '0', '100', '4', 'The Hamilton Spectator', 'Adam Crymble', 'http://www.thespec.com', 'function detectWeb(doc, url) { if (doc.location.href.match("search")) { return "multiple"; } else if (doc.location.href.match("article")) { return "newspaperArticle"; } }', '//Hamilton Spectator translator. code by Adam Crymble function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var newItem = new Zotero.Item("newspaperArticle"); if (doc.title.match("TheSpec.com - ")) { var lineBreak = doc.title.lastIndexOf(" - "); newItem.section = doc.title.substr(14, lineBreak-14); } var xPathAbstract = ''//span[@class="subhead1"][@id="ctl00_ContentPlaceHolder_article_NavWebPart_Article_ctl00___SubTitle1__"]''; if (doc.evaluate(xPathAbstract, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { newItem.abstractNote = doc.evaluate(xPathAbstract, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; } var xPathAuthor1 = ''//span[@class="articleAuthor"][@id="ctl00_ContentPlaceHolder_article_NavWebPart_Article_ctl00___Author1__"]''; if (doc.evaluate(xPathAuthor1, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var author1 = doc.evaluate(xPathAuthor1, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; if (author1.match(", ")) { author1 = author1.split(", "); author1 = author1[0]; } var words = author1.toLowerCase().split(/\s/); for (var i in words) { words[i] = words[i][0].toUpperCase() + words[i].substr(1).toLowerCase(); } author1 = words.join(" "); newItem.creators.push(Zotero.Utilities.cleanAuthor(author1, "author")); } var xPathAuthor2 = ''//span[@class="articleAuthor"][@id="ctl00_ContentPlaceHolder_article_NavWebPart_Article_ctl00___Author2__"]''; if (doc.evaluate(xPathAuthor2, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var author2 = doc.evaluate(xPathAuthor2, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; if (author2.match(", ")) { author2 = author2.split(", "); author2 = author2[0]; } var words = author2.toLowerCase().split(/\s/); for (var i in words) { words[i] = words[i][0].toUpperCase() + words[i].substr(1).toLowerCase(); } author2 = words.join(" "); newItem.creators.push(Zotero.Utilities.cleanAuthor(author2, "author")); } var xPathTitle = ''//span[@class="headlineArticle"][@id="ctl00_ContentPlaceHolder_article_NavWebPart_Article_ctl00___Title__"]''; newItem.title = doc.evaluate(xPathTitle, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; newItem.url = doc.location.href; newItem.publicationTitle = "The Hamilton Spectator"; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var titles = doc.evaluate(''//a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_title; while (next_title = titles.iterateNext()) { if (next_title.href.match("article") && !next_title.href.match("229246") && !next_title.textContent.match(/\s\s\s/)) { items[next_title.href] = next_title.textContent; } } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('9418dcc2-cc1e-432b-b7a6-7b00b7402d2f', '1.0.0b4.r5', '', '2008-08-21 15:45:00', '0', '100', '4', 'Hurricane Digital Memory Bank', 'Adam Crymble', 'http://hurricanearchive.org', 'function detectWeb(doc, url) { if (doc.evaluate(''//p[@id="cite-as"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "book"; } else if (doc.evaluate(''//p[@class="object_description"]/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()){ return "multiple"; } }', '//Hurricane Digital Memory Bank translator; Code by Adam Crymble function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var newItem = new Zotero.Item("book"); var dataTags = new Object(); var tagsContent = new Array(); var tags; var cite = doc.evaluate(''//p[@id="cite-as"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; var split1 = new Array(); var split2 = new Array(); var split3 = new Array(); var split4 = new Array(); var split5 = new Array(); //author split1 = cite.split('', "''); var authorWords = split1[0].split(/\b\s/); if (authorWords.length > 3) { newItem.creators.push({lastName: split1[0], creatorType: "creator"}); } else { newItem.creators.push(Zotero.Utilities.cleanAuthor(split1[0], "author")); } //title split2 = split1[1].split(''." ''); newItem.title = split2[0]; //repository split3 = split2[1].split("Bank, "); //object number split4 = split3[1].split(" ("); newItem.callNumber = split4[0]; //date posted and URL split5 = split4[1].split(")<"); newItem.date = split5[0]; //tags if (doc.evaluate(''//ul[@class="taglist"][@id="tags"]/li'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var xPathTags = doc.evaluate(''//ul[@class="taglist"][@id="tags"]/li'', doc, nsResolver, XPathResult.ANY_TYPE, null); var tagsCount = doc.evaluate(''count (//ul[@class="taglist"][@id="tags"]/li)'', doc, nsResolver, XPathResult.ANY_TYPE, null); for (var i =0; i < tagsCount.numberValue; i++) { newItem.tags[i] = xPathTags.iterateNext().textContent; } } newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var links = doc.evaluate(''//p[@class="object_description"]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var titles = doc.evaluate(''//p[@class="object_description"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_title; while (next_title = titles.iterateNext()) { items[links.iterateNext().href] = next_title.textContent; } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('add79dfd-7951-4c72-af1d-ce1d50aa4fb4', '1.0.0b4.r5', '', '2008-06-30 17:43:00', '0', '100', '4', 'informIT database', 'Adam Crymble', 'http://www.informit.com', 'function detectWeb(doc, url) { if (doc.title.match("Search Results")) { return "multiple"; } else if (doc.location.href.match("topics")) { return "multiple"; } else if (doc.location.href.match("product")) { return "book"; } else if (doc.location.href.match("guides")) { return "book"; } else if (doc.location.href.match("library")) { return "bookSection"; } else if (doc.location.href.match(/articles\/article/)) { return "bookSection"; } }', '//informIT database translator. Code by Adam Crymble function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var dataTags = new Object(); //FOR GUIDES if (doc.location.href.match("guides")) { var newItem = new Zotero.Item("book"); newItem.title = doc.evaluate(''//h1'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; var authors = doc.evaluate(''//div[@class="titling"]/p/a'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; } //FOR ARTICLES if (doc.location.href.match(/articles\/article/)) { var newItem = new Zotero.Item("bookSection"); var contents = doc.evaluate(''//div[@id="articleHeader"]/ul/li'', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathCount = doc.evaluate(''count (//div[@id="articleHeader"]/ul/li)'', doc, nsResolver, XPathResult.ANY_TYPE, null); var authors = contents.iterateNext().textContent.substr(3); if (doc.evaluate(''//div[@class="relatedBook"]/p/a'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { newItem.bookTitle = doc.evaluate(''//div[@class="relatedBook"]/p/a'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; } newItem.date = contents.iterateNext().textContent; var rights1; if (xPathCount.numberValue> 2) { newItem.rights = contents.iterateNext().textContent; } newItem.title = doc.evaluate(''//h1'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; } else if (doc.evaluate(''//ul[@class="bibliography"]/li'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { //FOR STORE BOOKS var newItem = new Zotero.Item("book"); var contents = doc.evaluate(''//ul[@class="bibliography"]/li'', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathCount = doc.evaluate(''count (//ul[@class="bibliography"]/li)'', doc, nsResolver, XPathResult.ANY_TYPE, null); for (i=0; i<xPathCount.numberValue; i++) { dataTags[i] = Zotero.Utilities.cleanTags(contents.iterateNext().textContent.replace(/^\s*|\s*$/g, '''')); } var authors = dataTags[0].substr(3); if (dataTags[1].match("Published")) { var publisherInfo = dataTags[1].substr(10); var date = publisherInfo.substr(0, 12); newItem.date = date; if (publisherInfo.match("by ")) { var publishCo = publisherInfo.split("by "); newItem.publisher = publishCo[1]; } } var extraStuff = dataTags[2].split(/\n/); var pageCut = extraStuff[0].indexOf("Pages"); var dimensions = extraStuff[0].substr(0, pageCut).split("Dimensions "); newItem.description = "Dimensions: " + dimensions[1]; newItem.pages = extraStuff[0].substr(pageCut+6); newItem.edition = extraStuff[1].replace(/Edition\:\s| \s\s*/g, ''''); newItem.ISBN = extraStuff[2].substr(31, 18); newItem.title = doc.evaluate(''//h1'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; //FOR LIBRARY BOOKS } else if (doc.location.href.match("library")) { var newItem = new Zotero.Item("bookSection"); newItem.title = doc.evaluate(''//h2'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; var meta = doc.evaluate(''//div[@id="columnOne"]/p'', doc, nsResolver, XPathResult.ANY_TYPE, null); newItem.bookTitle = meta.iterateNext().textContent; var authors = meta.iterateNext().textContent.substr(3); } //SHARED var noMoreAuthor = 0; if (authors.match(" and ")) { authors = authors.split(" and "); } else if (authors.match(", ")) { authors = authors.split(", "); } else { newItem.creators.push(Zotero.Utilities.cleanAuthor(authors, "author")); noMoreAuthor = 1; } if (authors.length>0 && noMoreAuthor != 1) { for (var i = 0; i < authors.length; i++) { newItem.creators.push(Zotero.Utilities.cleanAuthor(authors[i], "author")); } } newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var next_title; //xPath for Topics pages, else xPaths for regular search pages. if (doc.location.href.match("topics")) { var titles = doc.evaluate(''//div[@class="productList articles"]/dl/dt/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); } else { var titles = doc.evaluate(''//td[3][@class="results"]/ul/li/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var chapters = doc.evaluate(''//dt/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); } while (next_title = titles.iterateNext()) { items[next_title.href] = next_title.textContent; } if (doc.title.match("Search Results")) { while (next_title = chapters.iterateNext()) { items[next_title.href] = next_title.textContent; } } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('db0f4858-10fa-4f76-976c-2592c95f029c', '1.0.0b4.r5', '', '2008-07-24 05:30:00', '0', '100', '4', 'Internet Archive', 'Adam Crymble', 'http://www.archive.org', 'function detectWeb(doc, url) { var mediaType = "1"; if (doc.evaluate(''//h3'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { mediaType = doc.evaluate(''//h3'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent; } else if (doc.evaluate(''//div[@class="box"][@id="spotlight"]/h1'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { mediaType = doc.evaluate(''//div[@class="box"][@id="spotlight"]/h1'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent; }else if (doc.evaluate(''//div[@class="box"]/h1'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { mediaType = doc.evaluate(''//div[@class="box"]/h1'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent; } if (mediaType == "The Item") { return "artwork"; } else if ( mediaType.match("Spotlight")) { return "book"; }else if (mediaType.match("book")) { return "book"; } else if (mediaType.match("movie")) { return "videoRecording"; } else if (mediaType.match("audio")) { return "audioRecording"; } else if (doc.location.href.match("search") && mediaType == "1") { return "multiple"; } }', '//Internet Archive Translator. Code by Adam Crymble function associateData (newItem, dataTags, field, zoteroField) { if (dataTags[field]) { newItem[zoteroField] = dataTags[field]; } } function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var dataTags = new Object(); var tagsContent = new Array(); var fieldContents = new Array(); var fieldTitleLength; var fieldTitle; var scrapeType = 0; var mediaType1 = detectWeb(doc, url); if (mediaType1 == "artwork") { var newItem = new Zotero.Item("artwork"); //split contents by linebreak and push into an array if it is not empty var contents = doc.evaluate(''//div[@id="col2"]/div[@class="box"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.split(/\n/); for (var i = 0; i < contents.length; i++) { if (contents[i].match(/\w/)) { fieldContents.push(contents[i]); } } var headers = doc.evaluate(''//div[@id="col2"]/div[@class="box"]/b'', doc, nsResolver, XPathResult.ANY_TYPE, null); var headersCount = doc.evaluate(''count (//div[@id="col2"]/div[@class="box"]/b)'', doc, nsResolver, XPathResult.ANY_TYPE, null); for (var k = 0; k < headersCount.numberValue; k++) { fieldTitle = headers.iterateNext().textContent.toLowerCase(); fieldTitleLength = fieldTitle.length; var fieldTitleSpot; for (var j = 0; j < fieldContents.length; j++) { if (fieldContents[j].match(fieldTitle)) { fieldTitleSpot = fieldContents[j].indexOf(fieldTitle); if (fieldTitleSpot != 0) { fieldContents[j] = fieldContents[j].substr(fieldTitleSpot + fieldTitleLength); } else { fieldContents[j] = fieldContents[j].substr(fieldTitleLength); } dataTags[fieldTitle] = fieldContents[j].replace(/^\s*|\s*$/g, ''''); fieldContents[j] = ''''; } } } } else if (mediaType1 == "book") { var newItem = new Zotero.Item("book"); if (doc.evaluate(''//div[@class="darkBorder roundbox"][@id="main"]/table/tbody/tr/td[1]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var headers = doc.evaluate(''//div[@class="darkBorder roundbox"][@id="main"]/table/tbody/tr/td[1]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var contents = doc.evaluate(''//div[@class="darkBorder roundbox"][@id="main"]/table/tbody/tr/td[2]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_title; while (next_title = headers.iterateNext()) { fieldTitle = next_title.textContent.toLowerCase().replace(/\s+/g, ''''); if (!fieldTitle.match(":")) { fieldTitle = fieldTitle + ":"; } fieldContent = contents.iterateNext().textContent.replace(/^\s*|\s*$/g, ''''); dataTags[fieldTitle] = fieldContent; } } } else if (mediaType1 == "videoRecording") { var newItem = new Zotero.Item("videoRecording"); scrapeType = 1; } else if (mediaType1 == "audioRecording") { var newItem = new Zotero.Item("audioRecording"); scrapeType = 1; } if (scrapeType == 1) { var xPathHeaders = ''//div[@class="darkBorder roundbox"][@id="main"]/p[@class="content"]/span[@class="key"]''; if (doc.evaluate(''xPathHeaders'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var headers = doc.evaluate(''xPathHeaders'', doc, nsResolver, XPathResult.ANY_TYPE, null); var contents = doc.evaluate(''//span[@class="value"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_title; while (next_title = headers.iterateNext()) { fieldTitle = next_title.textContent.toLowerCase().replace(/\s+/g, ''''); fieldContent = contents.iterateNext().textContent.replace(/^\s*|\s*$/g, ''''); dataTags[fieldTitle] = fieldContent; } } } if (dataTags["creator:"]) { var author = dataTags["creator:"]; if (author.match(", ")) { var authors = author.split(", "); author = authors[1] + " " + authors[0]; newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "creator")); } else { newItem.creators.push({lastName: author, creatorType: "creator"}); } } if (dataTags["author:"]) { var author = dataTags["author:"]; if (author.match(", ")) { var authors = author.split(", "); author = authors[1] + " " + authors[0]; newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author")); } else { newItem.creators.push({lastName: author, creatorType: "author"}); } } if (doc.evaluate(''//div[@class="box"][@id="description"]/h1'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { newItem.title = doc.evaluate(''//div[@class="box"][@id="description"]/h1'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; } else if (doc.evaluate(''//div[@class="darkBorder roundbox"][@id="main"]/h1'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { newItem.title = doc.evaluate(''//div[@class="darkBorder roundbox"][@id="main"]/h1'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; } else { newItem.title = doc.title; } var tagsCount = "none"; if (dataTags["keywords:"]) { if (dataTags["keywords:"].match(";")) { var tagsContent = (dataTags["keywords:"].split(";")); tagsCount = "multiple"; } else if (dataTags["keywords:"].match(", ")) { var tagsContent = (dataTags["keywords:"].split(", ")); tagsCount = "multiple"; } else { var tagsContent = (dataTags["keywords:"]); tagsCount = "one"; } if (tagsCount == "multiple") { for (var i = 0; i < tagsContent.length; i++) { newItem.tags[i] = tagsContent[i]; } } else if (tagsCount == "one") { newItem.tags = tagsContent; } } if (dataTags["publisher:"]) { if (dataTags["publisher:"].match(":")) { var place1 = dataTags["publisher:"].split(":"); newItem.place = place1[0]; newItem.publisher = place1[1]; } else { associateData (newItem, dataTags, "publisher:", "publisher"); } } if (dataTags["rights:"]) { associateData (newItem, dataTags, "rights:", "rights"); } else if (dataTags["creativecommonslicense:"]) { newItem.rights = "Creative Commons License: " + dataTags["creativecommonslicense:"]; } associateData (newItem, dataTags, "title:", "title");; associateData (newItem, dataTags, "date:", "date"); associateData (newItem, dataTags, "callnumber:", "callNumber"); newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var titles = doc.evaluate(''//td[2][@class="hitCell"]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var titlesCount = doc.evaluate(''count (//td[2][@class="hitCell"]/a)'', doc, nsResolver, XPathResult.ANY_TYPE, null); Zotero.debug(titlesCount.numberValue); var next_title; for (var i = 0; i < titlesCount.numberValue; i++) { next_title = titles.iterateNext(); while (!next_title.href.match(/details/)) { i++; if (i == titlesCount.numberValue) { Zotero.debug(i); break; } next_title = titles.iterateNext(); } if (next_title.href.match(/details/)) { items[next_title.href] = next_title.textContent; } } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('513a53f5-b95e-4df6-a03e-3348d9ec9f44', '1.0', '', '2008-12-03 19:00:00', 1, 100, 4, 'Internet Archive Wayback Machine', 'Sean Takats', '^http://web.archive.org/web/', 'function detectWeb(doc, url){ var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == "x") return namespace; else return null; } : null; var xpath = ''//td[@class="mainBody"]/a''; var links = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null); if (links.iterateNext()){ return "multiple"; } return "webpage"; }', 'function doWeb(doc, url){ var uris = new Array(); var dateRe = new RegExp("^http://web.archive.org/web/([0-9]+)"); if (dateRe.test(url)){ //handle single item uris.push(url); } else{//handle multiple items var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == "x") return namespace; else return null; } : null; var xpath = ''//td[@class="mainBody"]/a''; var links = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var items=new Array(); var link; while (link = links.iterateNext()){ items[link.href] = link.textContent; } items=Zotero.selectItems(items); for (var i in items) { uris.push(i); } } Zotero.Utilities.processDocuments(uris, function(newDoc) { //create new webpage Item from page var newItem = new Zotero.Item("webpage"); newItem.title = newDoc.title; //parse date and add var m = dateRe.exec(newDoc.location.href); var date = m[1]; date = date.substr(0, 4) + "-" + date.substr(4,2) + "-" + date.substr(6,2); newItem.date = date; //create snapshot newItem.attachments = [{url:newDoc.location.href, title:newDoc.title, mimeType:"text/html"}]; newItem.complete(); }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('d1605270-d7dc-459f-9875-74ad8dde1f7d', '1.0.0b4.r5', '', '2008-08-21 15:45:00', '0', '100', '4', 'Le Devoir', 'Adam Crymble', 'http://www.ledevoir.com', 'function detectWeb(doc, url) { if (doc.location.href.match("Recherche")) { return "multiple"; } else if (doc.evaluate(''//div[@id="autresArticles"]/p'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "newspaperArticle"; } }', '//Le Devoir Translator. Code by Adam Crymble function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var tagsContent = new Array(); var newItem = new Zotero.Item("newspaperArticle"); var contents = doc.evaluate(''//div[@id="autresArticles"]/p'', doc, nsResolver, XPathResult.ANY_TYPE, null); var j = 0; var n = 0; var contentsArray = new Array(); var contents1; while (contents1 = contents.iterateNext()) { contentsArray.push(contents1.textContent); j++; } var author; var author1; var author2; if (j > 1) { for (var i in contentsArray) { if (contentsArray[i].match("├ëdition du ")) { var date1 = contentsArray[i].split("├ëdition du "); newItem.date = date1[1]; if (date1[0].match(/\w/)) { author = date1[0]; if (author.match(/\n/)) { author1 = author.split(/\n/); for (var k = 0; k < author1.length; k++) { if (author1[k].match(/\w/) && author1[k].match(", ")) { author2 = author1[k].split(", "); if (author2[0].match(/\w/)) { newItem.creators.push(Zotero.Utilities.cleanAuthor(author2[0], "author")); } else { newItem.creators.push(Zotero.Utilities.cleanAuthor(author2[1], "author")); } } else if (author1[k].match(/\w/) && !author1[k].match(", ")) { newItem.creators.push(Zotero.Utilities.cleanAuthor(author1[k], "author")); } } } else if (author.match(" et ")) { author1 = author.split(" et "); for (var k in author1) { newItem.creators.push(Zotero.Utilities.cleanAuthor(author1[k], "author")); } } else if (author.match(", ")) { author1 = author.split(", "); for (var k in author1) { newItem.creators.push(Zotero.Utilities.cleanAuthor(author1[k], "author")); } } else { newItem.creators.push(Zotero.Utilities.cleanAuthor(date1[0], "author")); } } } else if (contentsArray[i].match("Mots cl├⌐s")) { contentsArray[i] = contentsArray[i].substr(11); if (contentsArray[i].match(", ")) { tagsContent = contentsArray[i].split(", "); } else { newItem.tags = ontentsArray[i]; n = 1; } } } } if (n == 0 && tagsContent.length>1) { for (var i = 0; i < tagsContent.length; i++) { newItem.tags[i] = tagsContent[i]; } } newItem.title = doc.title; newItem.url = doc.location.href; newItem.publicationTitle = "Le Devoir"; newItem.ISSN = "0319-0722"; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var titles = doc.evaluate(''//td[2]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_title; while (next_title = titles.iterateNext()) { items[next_title.href] = next_title.textContent; } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('22d17fb9-ae32-412e-bcc4-7650ed3359bc', '1.0.0b4.r5', '', '2008-08-21 15:45:00', '0', '100', '4', 'Musee du Louvre', 'Adam Crymble', 'http://www.louvre.fr', 'function detectWeb(doc, url) { if (doc.location.href.match("recherche")) { return "multiple"; } else if (doc.evaluate(''//div[@class="alignRight"]/a/img'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "artwork"; } }', '//Translator Musee du Louvre. Code by Adam Crymble function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var dataTags = new Object(); var tagsContent = new Array(); var newItem = new Zotero.Item("artwork"); //tags var metaTagHTML = doc.getElementsByTagName("meta"); for (var i = 0 ; i < metaTagHTML.length ; i++) { dataTags[metaTagHTML[i].getAttribute("name")] = Zotero.Utilities.cleanTags(metaTagHTML[i].getAttribute("content")); } newItem.abstractNote = dataTags["description"]; if (dataTags["keywords"]) { if (dataTags["keywords"].match(", ")) { tagsContent = tagsContent = dataTags["keywords"].split(", "); } else if (dataTags["keywords"].split("πÇü")) { tagsContent = dataTags["keywords"].split("πÇü"); } } for (var i = 0; i < tagsContent.length; i++) { newItem.tags[i] = tagsContent[i]; } //date var xPathDate = ''//td[@class="txtContent"]/span[@class="txtContentSmall"]''; if (doc.evaluate(xPathDate, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { newItem.date = doc.evaluate(xPathDate, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; } //creator var xPathCreator = ''//td[@class="txtContent"]/strong''; if (doc.evaluate(xPathCreator, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var creator = doc.evaluate(xPathCreator, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.toLowerCase(); var comma = 0; var parenthesis = 0; var commaSpot; var parenthesisSpot; if (creator.match(", ")) { comma = 1; commaSpot = creator.indexOf(","); } if (creator.match(/\(/)) { parenthesis = 1; parenthesisSpot = creator.indexOf(" ("); } if (comma == 1 && parenthesis == 1) { if (commaSpot < parenthesisSpot) { creator = creator.substr(0, commaSpot); } else { creator = creator.substr(0, parenthesisSpot); } } else if (comma == 1 && parenthesis == 0) { creator = creator.substr(0, commaSpot); } else if (comma == 0 && parenthesis == 1) { creator = creator.substr(0, parenthesisSpot); } var words = creator.split(" "); for (var j in words) { if (words[j] != "" && words[j] != '' '') { if (words[j].match("-")) { Zotero.debug(words[j]); var hyphen = words[j].split("-"); hyphen[0] = hyphen[0][0].toUpperCase() + hyphen[0].substr(1).toLowerCase() + "-"; hyphen[1] = hyphen[1][0].toUpperCase() + hyphen[1].substr(1).toLowerCase(); words[j] = hyphen[0] + hyphen[1]; } else { words[j] = words[j][0].toUpperCase() + words[j].substr(1).toLowerCase(); } } } creator = words.join(" "); newItem.creators.push(Zotero.Utilities.cleanAuthor(creator, "artist")); } //title var title1 = doc.title.split(" |"); Zotero.debug(title1[0]); newItem.title = title1[0]; //extra if (doc.evaluate(''//h1'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var collection1 = doc.evaluate(''//h1'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; newItem.extra = collection1.replace(/^\s*|\s*$/g, ''''); } newItem.repository = "Mus├⌐e du Louvre"; newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var links = doc.evaluate(''//td[4][@class="alignTop"]/a[@class="lkContent"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var titles = doc.evaluate(''//h4'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_title; while (next_title = titles.iterateNext()) { items[links.iterateNext().href] = next_title.textContent; } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('5b02e8d4-d8fb-4143-af3d-3576d4c1b49c', '1.0.0b4.r5', '', '2008-08-21 15:45:00', '0', '100', '4', 'National Archives of South Africa', 'Adam Crymble', 'http://www.national.archsrch.gov.za', 'function detectWeb(doc, url) { if (doc.title.match("Results Summary")) { return "multiple"; } else if (doc.title.match("Results Detail")) { return "book"; } }', '//National Archives of South Africa Translator. Code by Adam Crymble function associateData (newItem, dataTags, field, zoteroField) { if (dataTags[field]) { newItem[zoteroField] = dataTags[field]; } } function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var dataTags = new Object(); var tagsContent = new Array(); var fieldTitle; var newItem = new Zotero.Item("book"); var headers = doc.evaluate(''//td[2]/pre/b'', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathCount = doc.evaluate(''count (//td[2]/pre/b)'', doc, nsResolver, XPathResult.ANY_TYPE, null); var contents = doc.evaluate(''//td[2]/pre'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; var headersArray = new Array(); var oneHeader = ''''; if (xPathCount.numberValue > 1) { for (var i = 0; i < xPathCount.numberValue; i++) { fieldTitle = headers.iterateNext().textContent; headersArray.push(fieldTitle); } } else { oneHeader = (headers.iterateNext().textContent); } var contentsArray = new Array(); var j = 0; if (oneHeader.length<1) { for (var i = headersArray.length-1; i> -1; i--) { var fieldIndex = contents.indexOf(headersArray[i]); var shorten = headersArray[i].length; contentsArray.push(contents.substr(fieldIndex)); contents = contents.substr(0, fieldIndex); fieldTitle = headersArray[i].replace(/\s+/g, ''''); dataTags[fieldTitle] = contentsArray[j].substr(shorten).replace(/^\s*|\s+$/g, ''''); j++; } } associateData (newItem, dataTags, "DEPOT", "repository"); associateData (newItem, dataTags, "REFERENCE", "callNumber"); associateData (newItem, dataTags, "STARTING", "date"); associateData (newItem, dataTags, "ENDING", "date"); associateData (newItem, dataTags, "VOLUME_NO", "volume"); associateData (newItem, dataTags, "REMARKS", "extra"); associateData (newItem, dataTags, "SUMMARY", "abstractNote"); if (dataTags["DESCRIPTION"]) { associateData (newItem, dataTags, "DESCRIPTION", "title"); } else { newItem.title = "No Title Found"; } newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var titles = doc.evaluate(''//td/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var lastLink; var next_title; while (next_title = titles.iterateNext()) { if (!next_title.textContent.match(/^\d\d\d\d/) && !next_title.textContent.match(/\\/) && next_title.textContent.length>3 && next_title.textContent.match(/\w/)) { Zotero.debug(next_title.textContent); items[next_title.href] = next_title.textContent; } } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('ed28758b-9c39-4e1c-af89-ce1c9202b70f', '1.0.0b4.r5', '', '2008-08-21 15:45:00', '0', '100', '4', 'National Gallery of Art - U.S.A.', 'Adam Crymble', 'http://www.nga.gov/', 'function detectWeb(doc, url) { var single = 0; if (doc.evaluate(''//div[@class="content"]/img'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()){ var pageType = doc.evaluate(''//div[@class="content"]/img'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().src; } if (doc.location.href.match("tinfo") || doc.title.match("timage")) { single = "1"; } if (doc.title.match("Image") && doc.location.href.match("fcgi")) { return "artwork"; } if (pageType.match("search_test")) { return "multiple"; } else if (doc.location.href.match("artistid")) { return "multiple"; } else if (single == "1" && pageType.match("collections_test")) { return "artwork"; } }', '//National Gallery USA translator. Code by Adam Crymble function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var style = 0; var title1; var newItem = new Zotero.Item("artwork"); //determines page layout type //single entry with thumbnail if (doc.evaluate(''//div[@class="BodyText"]/table/tbody/tr/td[2]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var content = doc.evaluate(''//div[@class="BodyText"]/table/tbody/tr/td[2]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.split(/\n/); style = 1; //single entry without thumbnail (2 variations) } else if (doc.evaluate(''//div[@class="BodyText"]/table/tbody/tr/td'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var content = doc.evaluate(''//div[@class="BodyText"]/table/tbody/tr/td'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.split(/\n/); if (content[1].match("Rendered")) { style = 3; } else { style = 1; } //single entry with large image. } else if (doc.evaluate(''//tr[2]/td[1]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var content = doc.evaluate(''//tr[2]/td[1]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.split(/\n/); style = 2; } if (style == 1) { newItem.creators.push(Zotero.Utilities.cleanAuthor(content[1], "artist")); var titleDate = content[3].split(", "); title1 = titleDate[0]; if (titleDate.length>2) { for (var j = 1; j < titleDate.length-1; j++) { title1 = (title1 + ", " + titleDate[j]); } } newItem.title = title1; if (titleDate.length > 1) { newItem.date = titleDate[titleDate.length-1]; } newItem.extra = ("Aquisition: " + content[content.length-3]); newItem.callNumber = content[content.length-2]; } else if (style == 2) { newItem.creators.push(Zotero.Utilities.cleanAuthor(content[0], "artist")); var date = content[1].split(", "); title1 = date[0]; if (date.length>2) { for (var j = 1; j < date.length-1; j++) { title1 = (title1 + ", " + date[j]); } } newItem.title = title1; newItem.date = date[date.length-1]; var acquisition = content[2].split(/\d/); newItem.extra = ("Aquisition: " + acquisition[0]); } else if (style == 3) { var titleAuthor = content[1].split("Rendered by "); newItem.title = titleAuthor[0]; newItem.creators.push(Zotero.Utilities.cleanAuthor(titleAuthor[1], "artist")); newItem.callNumber = content[content.length-2]; } newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); if (doc.location.href.match("artistid")) { var titles = doc.evaluate(''//ul/li/b/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); } else { var titles = doc.evaluate(''//ul/li/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); } var next_title; while (next_title = titles.iterateNext()) { if (next_title.textContent.match("image available")) { next_title = titles.iterateNext(); } items[next_title.href] = next_title.textContent; } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('54ac4ec1-9d07-45d3-9d96-48bed3411fb6', '1.0.0b4.r5', '', '2009-02-08 22:10:00', 1, 100, 4, 'National Library of Australia (new catalog)', 'Mark Triggs and Steve McPhillips', 'catalogue.nla.gov.au', 'function detectWeb(doc, url) { if (url.match("/Record/[0-9]+")) { var format = Zotero.Utilities.cleanString(doc.getElementById("myformat").textContent); if (format == "Audio") { return "audioRecording"; } else if (format == "Book") { return "book"; } else if (format == "Journal/Newspaper") { return "journalArticle"; } else if (format == "Manuscript") { return "manuscript"; } else if (format == "Map") { return "map"; } else if (format == "Music") { return "audioRecording"; } else if (format == "Online") { return "webpage"; } else if (format == "Picture") { return "artwork"; } else if (format == "Video") { return "videoRecording"; } else { return "book"; } } else if (url.match ("/Search/Home") && doc.getElementById ("resultItemLine1")) { return "multiple"; } }', 'function as_array(obj) { if (obj instanceof Array) { return obj; } else { return [obj]; } } function load_item(responseText, requestObject, format) { var metadata = JSON.parse(Zotero.Utilities.cleanString(responseText)); var newItem = new Zotero.Item(format); /* load in our authors */ if (metadata.authors) { for (var i=0; i< metadata.authors.length ; i++) { newItem.creators.push(Zotero.Utilities.cleanAuthor (metadata.authors[i], "author", true)); } } /* and our tags */ if (metadata.tags) { for (var i=0; i< metadata.tags.length ; i++) { newItem.tags.push(metadata.tags[i]); } } /* and our summary */ if (metadata.notes) { newItem.notes.push ({"note": metadata.notes}); } /* and everything else */ for (var attr in metadata) { if (!newItem[attr]) { newItem[attr] = metadata[attr]; } } newItem.repository = "National Library of Australia"; newItem.complete(); } function doWeb(doc, url) { format = detectWeb(doc, url); items = []; if (format == "multiple") { for (var url in Zotero.selectItems((Zotero.Utilities.getItemArray (doc, doc, "/Record/[0-9]+")))) { items.push(url); } } else { items.push(url); } if (items.length > 0) { Zotero.Utilities.processDocuments(items, function(onedoc) { handleDocument(onedoc); }, function() { Zotero.done(); }); Zotero.wait(); } } function handleDocument(doc) { bibid = doc.location.href.match("^.*\/Record/([0-9]+)")[1]; format = detectWeb(doc, doc.location.href); Zotero.Utilities.HTTP.doGet("http://catalogue.nla.gov.au/Record/" + bibid + "/Export?style=zotero", function(text, obj) { load_item(text, obj, format); }); }'); REPLACE INTO translators VALUES ('45763818-8530-49c6-a069-34acdee1a096', '1.0.0b4.r5', '', '2008-08-11 20:40:00', '0', '100', '4', 'National Library of New Zealand', 'Adam Crymble', 'http://nlnzcat.natlib', 'function detectWeb(doc, url) { if (doc.title.match("Quick Record View")) { return "book"; } else if (doc.title.match("Details Record View")) { return "book"; } else if (doc.title.match("Catalogue Titles")) { return "multiple"; } }', '//National Library of New Zealand translator. Code by Adam Crymble function associateData (newItem, dataTags, field, zoteroField) { if (dataTags[field]) { newItem[zoteroField] = dataTags[field]; } } function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var dataTags = new Object(); var tagsContent = new Array(); var headersArray = new Array(); var contentsArray = new Array(); var fieldTitle; var j = 0; var newItem = new Zotero.Item("book"); var headers = doc.evaluate(''//form/table/tbody/tr/th'', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathCount = doc.evaluate(''count (//form/table/tbody/tr/th)'', doc, nsResolver, XPathResult.ANY_TYPE, null); var contents = doc.evaluate(''//table[2]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; for (var i = 0; i < xPathCount.numberValue; i++) { fieldTitle = headers.iterateNext().textContent; if (fieldTitle.match(/\w/)) { headersArray.push(fieldTitle); } } for (var i = headersArray.length-1; i> -1; i--) { var fieldIndex = contents.lastIndexOf(headersArray[i]); contentsArray.push(contents.substr(fieldIndex)); contents = contents.substr(0, fieldIndex); fieldTitle = headersArray[i].replace(/\s+/g, ''''); dataTags[fieldTitle] = contentsArray[j].substr(headersArray[i].length).replace(/^\s*|\s+$/g, ''''); j++; } if (dataTags["Author:"]) { var author = dataTags["Author:"]; if (author.match(", ")) { var authors = author.split(", "); author = authors[1] + " " + authors[0]; newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author")); } else { newItem.creators.push({lastName: author, creatorType: "creator"}); } } if (dataTags["Publisher:"]) { if (dataTags["Publisher:"].match(": ")) { var place1 = dataTags["Publisher:"].indexOf(": "); newItem.place = dataTags["Publisher:"].substr(0, place1); var publisher1 = dataTags["Publisher:"].substr(place1 + 2); if (publisher1.match(", ")) { var date1 = publisher1.lastIndexOf(", "); newItem.date = publisher1.substr(date1 +2); newItem.publisher = publisher1.substr(0, date1); } else { newItem.publisher = publisher1; } } else { newItem.publisher = publisher1; } } if (dataTags["Subject:"]) { if (dataTags["Subject:"].match(/\n/)) { tagsContent = dataTags["Subject:"].split(/\n/) for (var i = 0; i < tagsContent.length; i++) { if (tagsContent[i].match(/\w/)) { newItem.tags[i] = tagsContent[i]; } } } else { newItem.tags = dataTags["Subject:"] } } if (dataTags["LCSubject:"]) { if (dataTags["LCSubject:"].match(/\n/)) { tagsContent = dataTags["LCSubject:"].split(/\n/) var k = 0; for (var i = 0; i < tagsContent.length; i++) { if (tagsContent[i].match(/\w/)) { newItem.tags[k] = tagsContent[i]; k++; } } } else { newItem.tags = dataTags["LCSubject:"] } } associateData (newItem, dataTags, "Title:", "title"); associateData (newItem, dataTags, "Description:", "pages"); associateData (newItem, dataTags, "CallNumber:", "callNumber"); associateData (newItem, dataTags, "Location:", "repository"); newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var titles = doc.evaluate(''//form/table/tbody/tr/td/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_title; while (next_title = titles.iterateNext()) { if (next_title.textContent.match(/\w/)) { items[next_title.href] = next_title.textContent; } } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('1c5b122c-7e58-4cd5-932b-93f5ca0b7e1a', '1.0.0b4.r5', '', '2008-08-11 20:40:00', '0', '100', '4', 'National Post', 'Adam Crymble', 'http://www.(national|financial)post.com/', 'function detectWeb(doc, url) { if (doc.title.match("Search Results")) { return "multiple"; } else if (doc.location.href.match("story")) { return "newspaperArticle"; } else if (doc.location.href.match("blog")) { return "blogPost"; } }', 'function associateData (newItem, dataTags, field, zoteroField) { if (dataTags[field]) { newItem[zoteroField] = dataTags[field]; } } function scrape(doc) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == "x" ) return namespace; else return null; } : null; var dataTags = new Object(); var author = new Array(); var mediaType = detectWeb(doc,doc.location.href); if (mediaType == "newspaperArticle") { var newItem = new Zotero.Item("newspaperArticle"); //metadata var dataTagHTML = doc.getElementsByTagName("meta"); for (var i = 0 ; i < dataTagHTML.length ; i++) { dataTags[dataTagHTML[i].getAttribute("name")] = Zotero.Utilities.cleanTags(dataTagHTML[i].getAttribute("content")); } associateData (newItem, dataTags, "Description", "abstractNote"); associateData (newItem, dataTags, "PubDate", "date"); //author if (dataTags["Author"]) { newItem.creators.push(Zotero.Utilities.cleanAuthor(dataTags["Author"], "author")); } else { author = doc.evaluate(''//strong'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.split(","); newItem.creators.push(Zotero.Utilities.cleanAuthor(author[0], "author")); } } else if (mediaType == "blogPost") { var newItem = new Zotero.Item("blogPost"); var blog = doc.evaluate(''//div[@class="entryviewfooter"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; blog = blog.replace("Posted:", '''').split("by"); newItem.date = blog[0].replace(/^\s*|\s*$/g, ''''); var author = doc.evaluate(''//span[@class="MoreRecentPostsAuthor"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.replace("by ", ''''); newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author")); } Zotero.debug(doc.location.href); newItem.url = doc.location.href; // This is ACTUALLY returning This URL: http://www.nationalpost.com/components/npemail.aspx?id=591742&ref=http://www.nationalpost.com/story.html var title1 = doc.title; Zotero.debug(title1); newItem.title = title1; newItem.publication = "The National Post"; newItem.ISSN = "1486-8008"; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var titles = doc.evaluate(''//h3[@class="alt"]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_title; while (next_title = titles.iterateNext()) { if (next_title.href.match("nationalpost")) { items[next_title.href] = next_title.textContent; Zotero.debug(next_title.href); Zotero.debug(next_title.textContent); } } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('b10bf941-12e9-4188-be04-f6357fa594a0', '1.0.0b4.r5', '', '2008-08-11 20:40:00', '0', '100', '4', 'Old Bailey Online', 'Adam Crymble', 'http://www.oldbaileyonline.org/', 'function detectWeb(doc, url) { if (doc.location.href.match("search")) { return "multiple"; } else if (doc.location.href.match("browse")) { return "case"; } }', '//Old Bailey Online translator. Code by Adam Crymble function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var tagsContent = new Array(); var fieldTitle; var newItem = new Zotero.Item("case"); var headers = doc.evaluate(''//div[@class="apparatus"]/b'', doc, nsResolver, XPathResult.ANY_TYPE, null); var contents = doc.evaluate(''//div[@class="apparatus"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; var xPathCount = doc.evaluate(''count (//div[@class="apparatus"]/b)'', doc, nsResolver, XPathResult.ANY_TYPE, null); var headersArray = new Array(); var oneHeader = ''''; if (xPathCount.numberValue > 1) { for (var i = 0; i < xPathCount.numberValue; i++) { fieldTitle = headers.iterateNext().textContent; headersArray.push(fieldTitle); } } else { oneHeader = (headers.iterateNext().textContent); } var contentsArray = new Array(); var j = 0; if (oneHeader.length<1) { for (var i = headersArray.length-1; i> -1; i--) { var fieldIndex = contents.indexOf(headersArray[i]); contentsArray.push(contents.substr(fieldIndex)); contents = contents.substr(0, fieldIndex); fieldTitle = headersArray[i].replace(/\s+/g, ''''); if (fieldTitle != "ReferenceNumber:") { tagsContent.push(contentsArray[j]); } else { newItem.extra = contentsArray[j]; } j++; } } else { if (oneHeader.match("Reference")) { newItem.extra = contents; } else { newItem.tags = contents; var noMoreTags = 1; } } if (noMoreTags != 1) { for (var i = 0; i < tagsContent.length; i++) { newItem.tags[i] = tagsContent[i]; } } newItem.title = doc.evaluate(''//div[@class="sessionsPaperTitle"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var titles = doc.evaluate(''//li/p[@class="srchtitle"]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_title; while (next_title = titles.iterateNext()) { items[next_title.href] = next_title.textContent; } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else if (doc.evaluate(''//div[@id="main2"]/p/a'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var xmlOrText = doc.evaluate(''//div[@id="main2"]/p/a'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if (xmlOrText.textContent.match("Text")) { articles = [xmlOrText.href]; } else { articles = [url]; } } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('96b54986-16c7-45ea-b296-fde962d658b2', '1.0.0b4.r5', '', '2008-07-24 05:30:00', '0', '100', '4', 'The Open Library', 'Adam Crymble', 'http://openlibrary.org', 'function detectWeb(doc, url) { if (doc.location.href.match("search")) { return "multiple"; } else if (doc.evaluate(''//div[@class="title-pad"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "book"; } }', '//Open Library Translator. Code by Adam Crymble function associateData (newItem, dataTags, field, zoteroField) { if (dataTags[field]) { newItem[zoteroField] = dataTags[field]; } } function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var dataTags = new Object(); var tagsContent = new Array(); var fieldTitle; var newItem = new Zotero.Item("book"); newItem.title = doc.evaluate(''//div[@class="title-pad"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; if (doc.evaluate(''//div[@id="header"]/div[@class="subtitle"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { newItem.abstractNote = doc.evaluate(''//div[@id="header"]/div[@class="subtitle"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; } var m = 0; if (doc.evaluate(''//div[@id="statement"]/span[@class="book-details-italic"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var publisher = doc.evaluate(''//div[@id="statement"]/span[@class="book-details-italic"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; var publisher1 = publisher.split(/\n/); for (var i= 0; i < publisher1.length; i++) { publisher1[i] = publisher1[i].replace(/^\s*|\s+$/g, ''''); if (publisher1[i].match("Published in ")) { newItem.date = publisher1[i].substr(13, publisher1[i].length-3); m = i+1; } else if (publisher1[i].match(/\(/)) { newItem.place = publisher1[i]; } } if (m > 0) { newItem.publisher = publisher1[m]; } } var headers = doc.evaluate(''//td[1]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var contents = doc.evaluate(''//td[2]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathCount = doc.evaluate(''count (//td[1])'', doc, nsResolver, XPathResult.ANY_TYPE, null); for (i=0; i<xPathCount.numberValue; i++) { fieldTitle = headers.iterateNext().textContent.replace(/\s+/g, ''''); dataTags[fieldTitle] = Zotero.Utilities.cleanTags(contents.iterateNext().textContent.replace(/^\s*|\s*$/g, '''')); } //author if (doc.evaluate(''//div[@id="statement"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var author = doc.evaluate(''//div[@id="statement"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; var author = author.split(/\n/); for (var i in author) { author[i] = author[i].replace(/^\s*|\s*$/g, ''''); if (author[i].match(/^by/)) { author = author[i].substr(3); if (author.match(", ")) { if (author.match(/\s/)) { var wordcount = author.split(/\s/); if (wordcount.length > 3) { var words = author.split(", "); for (var k in words) { newItem.creators.push(Zotero.Utilities.cleanAuthor(words[k], "author")); } } else { var words = author.split(", "); author = words[1] + " " + words[0]; newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author")); break; } } } else { newItem.creators.push({lastName: author, creatorType: "creator"}); break; } } } } var m = 0; if (dataTags["Subject:"]) { if (dataTags["Subject:"].match(/\n/)) { tagsContent = dataTags["Subject:"].split(/\n/); for (var i = 0; i < tagsContent.length; i++) { if (tagsContent[i].match(/\w/)) { newItem.tags[m] = tagsContent[i]; m++; } } } else { newItem.tags = dataTags["Subject:"]; } } if (dataTags["ISBN13:"]) { newItem.extra = "ISBN 13: " + dataTags["ISBN13:"]; } associateData (newItem, dataTags, "Language:", "language"); associateData (newItem, dataTags, "ISBN10:", "ISBN"); associateData (newItem, dataTags, "Series:", "series"); associateData (newItem, dataTags, "Edition:", "edition"); associateData (newItem, dataTags, "Pagination:", "pages"); newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var titles = doc.evaluate(''//td[2][@class="result-text"]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_title; while (next_title = titles.iterateNext()) { items[next_title.href] = next_title.textContent; } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('6871e8c5-f935-4ba1-8305-0ba563ce3941', '1.0.0b4.r5', '', '2008-08-11 20:40:00', '0', '100', '4', 'PEI Archival Information Network', 'Adam Crymble', 'http://www.archives.pe.ca', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; if (doc.evaluate(''//td[2]/table/tbody/tr/td/p'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.match("Search")) { return "multiple"; } else if (doc.evaluate(''//td[2]/table/tbody/tr/td/p'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.match("Display")){ return "book"; } }', '//PEI Archival Information Network translator: Code by Adam Crymble var authors; function associateData (newItem, dataTags, field, zoteroField) { if (dataTags[field]) { newItem[zoteroField] = dataTags[field]; } } function authors1() { for (var k = 0; k< authors.length; k++) { if (authors[k].match(", ")) { var author = authors[k].split(", "); authors[k] = (author[1] + (" ") + author[0].replace(/^\s*|\s*$/g, '''')); newItem.creators.push(Zotero.Utilities.cleanAuthor(authors[k], "author")); } else { newItem.creators.push({lastName: authors[k], creatorType: "creator"}); } } } function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var dataTags = new Object(); var fieldTitle; var contents; var tagsContent = new Array(); newItem = new Zotero.Item("book"); var xPathHeadings = doc.evaluate(''//small/b'', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathContents = doc.evaluate(''//dd'', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathCount = doc.evaluate(''count (//small/b)'', doc, nsResolver, XPathResult.ANY_TYPE, null); for (i=0; i<xPathCount.numberValue; i++) { fieldTitle = xPathHeadings.iterateNext().textContent.replace(/\s+/g, ''''); contents = xPathContents.iterateNext().textContent; if (fieldTitle == "AccessPoints") { //creates Author dataTags["Author"] = (contents.substr(11).replace(/^\s*|\s*$/g, '''')); contents = xPathContents.iterateNext().textContent; authors = dataTags["Author"].split(/\n/); authors1(); //creates Other Authors (if any) dataTags["OtherAuthor"] = (contents.substr(13).replace(/^\s*|\s*$/g, '''')); contents = xPathContents.iterateNext().textContent; if (dataTags["OtherAuthor"].match("no Other Author access points found")) { } else { authors = dataTags["OtherAuthor"].split(/\n/); authors1(); } //creates tags dataTags["subject"] = (contents); var tags; var tagLinks = doc.evaluate(''//dd/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var tagsLinksCount = doc.evaluate(''count (//dd/a)'', doc, nsResolver, XPathResult.ANY_TYPE, null); for (j = 0; j < tagsLinksCount.numberValue; j++) { tags = tagLinks.iterateNext(); if (tags.href.match("subject")) { tagsContent.push(tags.textContent); } } } else { dataTags[fieldTitle] = (contents.replace(/^\s*|\s*$/g, '''')); } } for (var i = 0; i < tagsContent.length; i++) { newItem.tags[i] = tagsContent[i]; } associateData (newItem, dataTags, "NameofRepository", "repository"); associateData (newItem, dataTags, "DatesofCreation", "date"); associateData (newItem, dataTags, "Identifier", "callNumber"); associateData (newItem, dataTags, "PhysicalDescription", "extra"); associateData (newItem, dataTags, "ScopeAndContent", "abstractNote"); associateData (newItem, dataTags, "Title/StmntofResponsibility", "title"); newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var xPathTitles = doc.evaluate(''//td/ul'', doc, nsResolver, XPathResult.ANY_TYPE, null); var linkContent = xPathTitles.iterateNext().textContent.split(/\n/); var linkContent1; var linkHref = new Array(); var xPathLinks= doc.evaluate(''//ul/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathLinksCount = doc.evaluate(''count (//ul/a)'', doc, nsResolver, XPathResult.ANY_TYPE, null); for (i=0; i< xPathLinksCount.numberValue; i++) { linkHref.push(xPathLinks.iterateNext().href); var y = (i + 1); linkContent1 = linkContent[y].split("- "); items[linkHref[i]] = linkContent1[1]; } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('095239e7-c18c-4f45-a932-bcf4a9e48c08', '1.0.0b4.r5', '', '2008-08-11 20:40:00', '0', '100', '4', 'Probing the Past', 'Adam Crymble', 'http://chnm.gmu.edu/probateinventory/', 'function detectWeb(doc, url) { if (doc.evaluate(''//td/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else if (doc.location.href.match("document")) { return "book"; } }', '//Probing the Past translator; Code by Adam Crymble function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var dataTags = new Object(); var newItem = new Zotero.Item("book"); var title = doc.evaluate(''//h2'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; var author = title.split(", "); author = author[1] + " " + author[0]; newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author")); newItem.title = "Probate of " + author; var citation = doc.evaluate(''//table[@id="browseinfo"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; var citation = citation.split(": "); citation[1] = citation[1].replace("County/City", ''''); citation[2] = citation[2].replace("State", ''''); for (var i = 0; i < citation.length; i++) { citation[i] = citation[i].replace(/^\s*|\s*$/g, ''''); } Zotero.debug(citation); newItem.date = citation[1]; newItem.place = citation[2] + ", " + citation[3]; newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var titles = doc.evaluate(''//td/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var titlesCount = doc.evaluate(''count (//td/a)'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_date; var next_title; var next_town; for (var i = 0; i < titlesCount.numberValue/3; i++) { next_date = titles.iterateNext(); next_title = titles.iterateNext(); items[next_title.href] = next_title.textContent; next_town = titles.iterateNext(); } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('d770e7d2-106c-4396-8c32-b35cdc46376c', '1.0.0b4.r5', '', '2008-08-11 20:40:00', '0', '100', '0', 'Project Gutenberg', 'Adam Crymble', 'http://www.gutenberg.org', 'function detectWeb(doc, url) { if (doc.location.href.match("etext")||doc.location.href.match("ebooks")) { return "book"; } else if (doc.location.href.match("catalog")) { return "multiple"; } }', '//Project Gutenberg translator. Code by Adam Crymble. function associateData (newItem, dataTags, field, zoteroField) { if (dataTags[field]) { newItem[zoteroField] = dataTags[field]; } } function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var dataTags = new Object(); var odd = "yes"; var creatorType = new Array(); var creatorField = new Array(); var creatorContent = new Array(); var newItem = new Zotero.Item("book"); var headingsEven = doc.evaluate(''//tr[@class="oddrow"]/th'', doc, nsResolver, XPathResult.ANY_TYPE, null); var headingsEvenCount = doc.evaluate(''count(//tr[@class="oddrow"]/th)'', doc, nsResolver, XPathResult.ANY_TYPE, null); var headingsOdd = doc.evaluate(''//tr[@class="evenrow"]/th'', doc, nsResolver, XPathResult.ANY_TYPE, null); var headingsOddCount = doc.evaluate(''count(//tr[@class="evenrow"]/th)'', doc, nsResolver, XPathResult.ANY_TYPE, null); var content = doc.evaluate(''//div[@class="pgdbdata"]/table/tbody//td'', doc, nsResolver, XPathResult.ANY_TYPE, null); for (var i = 0; i < headingsEvenCount.numberValue + headingsOddCount.numberValue; i++) { if (odd == "yes") { fieldTitle = headingsOdd.iterateNext().textContent.replace(/\s+/g, ''''); odd = "no"; } else { fieldTitle = headingsEven.iterateNext().textContent.replace(/\s+/g, ''''); odd = "yes"; } dataTags[fieldTitle] = Zotero.Utilities.cleanTags(content.iterateNext().textContent.replace(/^\s*|\s*$/g, '''')); if (fieldTitle == "Creator") { creatorType.push("author"); creatorField.push("Creator"); creatorContent.push(dataTags[fieldTitle]); } else if (fieldTitle == "Illustrator") { creatorType.push("illustrator"); creatorField.push("Illustrator"); creatorContent.push(dataTags[fieldTitle]); }else if (fieldTitle == "Translator") { creatorType.push("translator"); creatorField.push("Translator"); creatorContent.push(dataTags[fieldTitle]); } else if (fieldTitle == "Editor") { creatorType.push("editor"); creatorField.push("Editor"); creatorContent.push(dataTags[fieldTitle]); } else if (fieldTitle == "Commentator") { creatorType.push("commentator"); creatorField.push("Commentator"); creatorContent.push(dataTags[fieldTitle]); } else if (fieldTitle == "Contributor") { creatorType.push("contributor"); creatorField.push("Contributor"); creatorContent.push(dataTags[fieldTitle]); } if (fieldTitle == "Imprint") { var place = dataTags["Imprint"].split(":"); newItem.place = place[0]; Zotero.debug(place); } if (fieldTitle == "Subject") { newItem.tags[i] = dataTags["Subject"]; } } for (var i = 0; i < creatorType.length; i++) { if (creatorContent[i].match(", ")) { var author = creatorContent[i].split(", "); var author = author[1] + " " + author[0]; newItem.creators.push(Zotero.Utilities.cleanAuthor(author, creatorType[i])); } else { newItem.creators.push(Zotero.Utilities.cleanAuthor(creatorContent[i], creatorType[i])); } } if (dataTags["EText-No."]) { newItem.callNumber = "EText-No. " + dataTags["EText-No."]; } if (dataTags["ReleaseDate"]) { newItem.date = "Release Date " + dataTags["ReleaseDate"]; } if (dataTags["LoCClass"]) { newItem.extra = "LoC Class " + dataTags["LoCClass"]; } associateData (newItem, dataTags, "Title", "title"); associateData (newItem, dataTags, "Language", "language"); associateData (newItem, dataTags, "CopyrightStatus", "rights"); newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var allLinks = doc.evaluate(''//td/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathCount = doc.evaluate(''count(//td/a)'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_title; for (var i = 0; i < xPathCount.numberValue; i++) { next_title = allLinks.iterateNext(); if (next_title.href.match("etext")) { items[next_title.href] = next_title.textContent; } } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('40b9ca22-8df4-4f3b-9cb6-8f9b55486d30', '1.0.0b4.r5', '', '2009-01-09 21:10:00', 1, 100, 4, 'Telegraph.co.uk', 'Reino Ruusu', '^http://www\.telegraph\.co\.uk/', 'function detectWeb(doc, url) { Zotero.debug("detectWeb URL= "+ url); var result = doc.evaluate(''html/head/meta[@name = "article-id"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext(); if (result) { return "newspaperArticle"; } return null; }', 'function getAuthors(byline) { if (byline.search(/.+(?:,\s.+)+\sand\s.+/) == -1) { byline = byline.replace(/,\s.+$/, ""); } byline = byline.replace(/\s+(?:in|at)\s+.+$/, ""); return byline.split(/(?:,\s+|\s+and\s+)/); } function putAuthors(item, byline) { for each (var a in getAuthors(byline)) { item.creators.push(Zotero.Utilities.cleanAuthor(a, "author")); } } function doWeb(doc, url) { Zotero.debug("doWeb URL= "+ url); var newArticle = new Zotero.Item(''newspaperArticle''); newArticle.url = url; newArticle.publicationTitle = ''Telegraph.co.uk''; //newArticle.publisher = ''Telegraph Media Group Limited''; //Zotero.debug(doc.evaluate(''//html/head/meta[@name="title"]/@content'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); var metaElements = doc.evaluate(''html/head/meta'', doc, null, XPathResult.ANY_TYPE, null); var tmp; while (tmp = metaElements.iterateNext()) { var name = tmp.getAttribute(''name''); var content = tmp.getAttribute(''content''); if (name == ''title'') newArticle.title = content; else if (name == ''author'') { content = Zotero.Utilities.trim(content); //Zotero.debug(content); content = content.replace(/^By\s+/, ""); putAuthors(newArticle, content); } else if (name == ''description'') { newArticle.abstractNote = content.replace(/\s+/gm, " "); } } var datePath = ''//div[@class="story"]/div[@class="byline"]/p[1]/br/following-sibling::text()''; var dateElement = doc.evaluate(datePath, doc, null,XPathResult.ANY_TYPE, null).iterateNext(); if (dateElement) { var dateRE = /\d\d?\s+(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+\d\d\d\d/; var date = dateElement.textContent.match(dateRE); if (date) newArticle.date = date[0]; } newArticle.complete(); }'); REPLACE INTO translators VALUES ('6b0b11a6-9b77-4b49-b768-6b715792aa37', '1.0.0b4.r5', '', '2008-08-06 17:00:00', '0', '100', '4', 'Toronto Star', 'Adam Crymble', 'http://www.thestar.com', 'function detectWeb(doc, url) { if (doc.location.href.match("search") && !doc.location.href.match("classifieds")) { return "multiple"; } else if (doc.location.href.match("article")) { return "newspaperArticle"; } }', '//Toronto Star translator. code by Adam Crymble function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var newItem = new Zotero.Item("newspaperArticle"); if (doc.title.match("TheStar.com | ")) { var lineBreak = doc.title.lastIndexOf(" |"); newItem.section = doc.title.substr(14, lineBreak-14); } var byLine = doc.evaluate(''//div[@id="ctl00_ContentPlaceHolder_article_NavWebPart_Article"]/div/span'', doc, nsResolver, XPathResult.ANY_TYPE, null); var nextEntry; while (nextEntry = byLine.iterateNext()) { if (nextEntry.textContent.match(" PM") || nextEntry.textContent.match(" AM") && nextEntry.textContent.match(/\d\d\d\d/)) { newItem.date = nextEntry.textContent; } else { newItem.abstractNote = nextEntry.textContent; } } var author1 = new Array(); var k = 0; if (doc.evaluate(''//span[@class="articleAuthor"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var author = doc.evaluate(xPathAuthor, doc, nsResolver, XPathResult.ANY_TYPE, null); var authorName; while (authorName = author.iterateNext()) { author1.push(authorName.textContent); k++; } if (k>1) { for (k in author1) { var words = author1[k].toLowerCase().split(/\s/); for (var i in words) { words[i] = words[i][0].toUpperCase() + words[i].substr(1).toLowerCase(); } author1[k] = words.join(" "); newItem.creators.push(Zotero.Utilities.cleanAuthor(author1[k], "author")); } } else { var words = author1[0].toLowerCase().split(/\s/); for (var i in words) { words[i] = words[i][0].toUpperCase() + words[i].substr(1).toLowerCase(); } author1[0] = words.join(" "); newItem.creators.push(Zotero.Utilities.cleanAuthor(author1[0], "author")); } } var xPathTitle = ''//span[@class="headlineArticle"][@id="ctl00_ContentPlaceHolder_article_NavWebPart_Article_ctl00___Title__"]''; newItem.title = doc.evaluate(xPathTitle, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; newItem.url = doc.location.href; newItem.publicationTitle = "The Toronto Star"; newItem.ISSN = "0319-0781"; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var titles = doc.evaluate(''//a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_title; while (next_title = titles.iterateNext()) { if (next_title.href.match("http://www.thestar.com") && next_title.href.match("article") && !next_title.href.match("generic") && !next_title.href.match("static")) { items[next_title.href] = next_title.textContent; } } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('35d6c82d-4749-4cc5-9e12-2924307df28f', '1.0.0b4.r5', '', '2008-08-06 17:00:00', '0', '100', '4', 'UBC Library Catalog', 'Adam Crymble', 'http://webcat(1||2).library.ubc', 'function detectWeb(doc, url) { if (doc.evaluate(''//tbody/tr/td[1]/b'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else if (doc.evaluate(''//center/h4/i/strong/bdo'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "book"; } }', '//UBC Library Catalog translator. Code by Adam Crymble function associateData (newItem, dataTags, field, zoteroField) { if (dataTags[field]) { newItem[zoteroField] = dataTags[field]; } } function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var dataTags = new Object(); var tagsContent = new Array(); var headersArray = new Array(); var fieldTitle; var newItem = new Zotero.Item("book"); var headers = doc.evaluate(''//form/table/tbody/tr/th'', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathCount= doc.evaluate(''count (//form/table/tbody/tr/th)'', doc, nsResolver, XPathResult.ANY_TYPE, null); var contents = doc.evaluate(''//form/table'', doc, nsResolver, XPathResult.ANY_TYPE, null); var dump = contents.iterateNext(); for (var i = 0; i < xPathCount.numberValue; i++) { fieldTitle = headers.iterateNext().textContent; if (fieldTitle.match(/\w/)) { headersArray.push(fieldTitle); } } var contentsArray = new Array(); var j = 0; contents = contents.iterateNext().textContent.replace(/\s\s/g, ''''); for (var i = headersArray.length-1; i> -1; i--) { var fieldIndex = contents.lastIndexOf(headersArray[i]); var headerLength = headersArray[i].length; contentsArray.push(contents.substr(fieldIndex+headerLength)); contents = contents.substr(0, fieldIndex); fieldTitle = headersArray[i].replace(/\s+/g, ''''); if (fieldTitle == "Subject(s):") { if (contentsArray[j].match(". ")) { var tagsContent = contentsArray[j].split(". ") } else if (contentsArray[j].match(/\n/)) { var tagsContent = contentsArray[j].split(/\n/); } else { newItem.tags = contentsArray[j]; var noMoreTags = 1; } } dataTags[fieldTitle] = contentsArray[j].replace(/^\s*|\s+$/g, ''''); j++; } j = 0; if (noMoreTags != 1) { for (var i = 0; i < tagsContent.length; i++) { if (tagsContent[i].match(/\w/)) { newItem.tags[j] = tagsContent[i].replace(/^\s*|\s+$/g, ''''); j++; } } } if (dataTags["MainAuthor:"]) { var author = dataTags["MainAuthor:"]; if (author.match(", ")) { var authors = author.split(", "); author = authors[1] + " " + authors[0]; newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author")); } else { newItem.creators.push({lastName: author, creatorType: "creator"}); } } if (dataTags["OtherAuthor(s):"]) { var author = dataTags["OtherAuthor(s):"]; if (author.match(", ")) { var authors = author.split(", "); author = authors[1] + " " + authors[0]; newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author")); } else { newItem.creators.push({lastName: author, creatorType: "creator"}); } } if (dataTags["Published:"]) { if (dataTags["Published:"].match(": ")) { var imprint = dataTags["Published:"]; var place1 = imprint.indexOf(": "); newItem.place = imprint.substr(0, place1); var imprint2 = imprint.substr(place1+2); if (imprint2.match(/\d\d\d/)) { var date1 = imprint2.lastIndexOf(/\d\d\d/); var date2 = imprint2.substr(date1-4); newItem.date = date2; newItem.publisher = imprint2.substr(0, imprint2.length-(newItem.date.length+2)); } else { newItem.publisher = imprint2; } } else { newItem.publisher = dataTags["Published:"] } } associateData (newItem, dataTags, "Title:", "title"); associateData (newItem, dataTags, "CallNumber:", "callNumber"); associateData (newItem, dataTags, "Description:", "pages"); associateData (newItem, dataTags, "Location:", "repository"); newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var titles = doc.evaluate(''//form/table/tbody/tr/td/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_title; while (next_title = titles.iterateNext()) { items[next_title.href] = next_title.textContent; } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('f8b5501a-1acc-4ffa-a0a5-594add5e6bd3', '1.0.0b4.r5', '', '2008-08-06 17:00:00', '0', '100', '4', 'US National Archives Research Catalog', 'Adam Crymble', 'http://arcweb.archives.gov', 'function detectWeb(doc, url) { if (doc.location.href.match("ShowArchivalDescriptions") || doc.location.href.match("ShowDODescriptions")) { return "multiple"; } else if (doc.location.href.match("ShowFullRecord") && doc.location.href.match("showFullDescriptionTabs/details")) { return "book"; } }', '//US National Archives. Code by Adam Crymble function associateData (newItem, dataTags, field, zoteroField) { if (dataTags[field]) { newItem[zoteroField] = dataTags[field]; } } function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var dataTags = new Object(); var fieldTitle; var newItem = new Zotero.Item("book"); var contents2 = doc.evaluate(''//td[1]/div[@class="sT"]/p'', doc, nsResolver, XPathResult.ANY_TYPE, null); for (var i = 0; i < 3; i++) { if (i == 0) { newItem.title = contents2.iterateNext().textContent.replace(/^\s*|\s+$/g, ''''); } else if (i == 1) { newItem.extra = contents2.iterateNext().textContent.replace(/^\s*|\s+$/g, ''''); } else if (i == 2) { newItem.locInArchive= contents2.iterateNext().textContent.replace(/^\s*|\s+$/g, ''''); } } var headers = doc.evaluate(''//tbody/tr/th'', doc, nsResolver, XPathResult.ANY_TYPE, null); var contents = doc.evaluate(''//body/div[@class="genPad"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; var xPathCount = doc.evaluate(''count (//tbody/tr/th)'', doc, nsResolver, XPathResult.ANY_TYPE, null); var headersArray = new Array(); var oneHeader = ''''; if (xPathCount.numberValue > 1) { for (var i = 0; i < xPathCount.numberValue; i++) { fieldTitle = headers.iterateNext().textContent; headersArray.push(fieldTitle); } } else { oneHeader = (headers.iterateNext().textContent); } var contentsArray = new Array(); var j = 0; if (oneHeader.length<1) { for (var i = headersArray.length-1; i> -1; i--) { var fieldIndex = contents.lastIndexOf(headersArray[i]); var fieldIndexLength = headersArray[i].length; contentsArray.push(contents.substr(fieldIndex)); contents = contents.substr(0, fieldIndex); fieldTitle = headersArray[i].replace(/\s+/g, ''''); dataTags[fieldTitle] = contentsArray[j].substr(fieldIndexLength).replace(/^\s*|\s+$/g, ''''); j++; } } j = 0; var k = 0; var tagsContent = new Array(); if (dataTags["IndexTerms:"]) { if (dataTags["IndexTerms:"].match(/\n/)){ var tagsContent = dataTags["IndexTerms:"].split(/\n/); } else { if (!dataTags["IndexTerms:"].match("Subjects Represented in the Archival Material")) { newItem.tags = dataTags["IndexTerms:"]; } } if (tagsContent.length > 1) { for (var i = 0; i < tagsContent.length; i++) { if (tagsContent[i].match(/\w/)) { if (k == 1) { newItem.tags[j] = tagsContent[i]; j++; } k = 1; } } } } associateData (newItem, dataTags, "ProductionDate(s):", "date"); associateData (newItem, dataTags, "PartOf:", "series"); associateData (newItem, dataTags, "VariantControlNumber(s):", "callNumber"); if (dataTags["Creator(s):"]) { var author = dataTags["Creator(s):"]; if (author.match(", ")) { var authors = author.split(", "); author = authors[1] + " " + authors[0]; newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author")); } else { newItem.creators.push({lastName: author, creatorType: "creator"}); } } newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); if (doc.evaluate(''//div[@class="sT"]/p/strong[@class="sFC"]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var titles = doc.evaluate(''//div[@class="sT"]/p/strong[@class="sFC"]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); } else if (doc.evaluate(''//td[3]/div[@class="sT"]/p/strong[@class="sFC"]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var titles = doc.evaluate(''//td[3]/div[@class="sT"]/p/strong[@class="sFC"]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); } var next_title; while (next_title = titles.iterateNext()) { items[next_title.href] = next_title.textContent; } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('1d82cbdf-703d-4f96-9ae2-246af21bb96e', '1.0.0b4.r5', '', '2008-08-06 17:00:00', '0', '100', '4', 'Winnipeg Free Press', 'Adam Crymble', 'http://www.winnipegfreepress', 'function detectWeb(doc, url) { if (doc.location.href.match("articles") || doc.location.href.match("story")) { return "newspaperArticle"; } }', '//Winnipeg Free Press Translator. Code by Adam Crymble //works for single entries only. function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var newItem = new Zotero.Item("newspaperArticle"); newItem.title = doc.evaluate(''//h3'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.replace(/^\s*|\s*$/g, ''''); if (doc.evaluate(''//div[@id="middlecol"]/h4'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { newItem.abstractNote = doc.evaluate(''//div[@id="middlecol"]/h4'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.replace(/^\s*|\s*$/g, ''''); } if (doc.evaluate(''//div[@id="bylines"]/p[@class="byline"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var byline = doc.evaluate(''//p[@class="byline"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var k = 0; var byLineArray = new Array(); var nextByLine; while (nextByLine = byline.iterateNext()) { byLineArray.push(nextByLine.textContent.replace(/^\s*|\s*$/g, '''')); k++; } if (k>1) { for (var i = 0; i < byLineArray.length; i++) { if (byLineArray[i].match("Updated:")) { newItem.date = byLineArray[i].substr(9).replace(/^\s*|\s*$/g, ''''); } else if (byLineArray[i].match("bylineParse") && byLineArray[i].substr(13).match(/\w/)) { var author = (byLineArray[i].substr(13)); var authorLength = author.length/2; var author = author.substr(0 + authorLength); var m = 0; if (author.match(" - ")) { var author = author.split('' - ''); } else if (author.match(", ")) { var author = author.split('', ''); } else if (author.match(/ By /)) { var author = author.split(/By/); author[0] = author[1]; } else if (author.match(/By:/)) { var author = author.split(/By:/); author[0] = author[1]; } else { newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author")); m = 1; } if (m == 0) { newItem.creators.push(Zotero.Utilities.cleanAuthor(author[0], "author")); } } } } } newItem.publicationTitle = "Winnipeg Free Press"; newItem.url = doc.location.href; newItem.complete(); } function doWeb (doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { }: null; var uris= new Array(); uris.push(url); Zotero.Utilities.processDocuments(uris, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('dbfcaa3e-082a-45a4-9619-9892f49399c1', '1.0.0b4.r5', '', '2008-08-06 17:00:00', '0', '100', '4', 'Cyberpresse', 'Adam Crymble', 'http://www.cyberpresse.ca', 'function detectWeb (doc, url) { if (doc.location.href.match("article")) { return "newspaperArticle"; } }', '//Cyberpresse translator. Code by Adam Crymble function associateData (newItem, dataTags, field, zoteroField) { if (dataTags[field]) { newItem[zoteroField] = dataTags[field]; } } function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var dataTags = new Object(); var tagsContent = new Array(); var fieldTitle; var newItem = new Zotero.Item("newspaperArticle"); if (doc.title.match("|")) { var titleStuff = doc.title.split("|"); if (titleStuff[0].match(":")) { var authorTitle = titleStuff[0].split(":"); newItem.title = authorTitle[1]; newItem.creators.push(Zotero.Utilities.cleanAuthor(authorTitle[0], "author")); } else { newItem.title = titleStuff[0]; } } else { newItem.title = doc.title; } var dataTagHTML = doc.getElementsByTagName("meta"); for (var i = 0 ; i < dataTagHTML.length ; i++) { dataTags[dataTagHTML[i].getAttribute("name")] = Zotero.Utilities.cleanTags(dataTagHTML[i].getAttribute("content")); } if (doc.evaluate(''//div[@id="nouvelle"]/p[@class="auteur"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var author = doc.evaluate(''//div[@id="nouvelle"]/p[@class="auteur"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author")); } if (doc.evaluate(''//div[@id="nouvelle"]/p[@class="date"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { newItem.date = doc.evaluate(''//div[@id="nouvelle"]/p[@class="date"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; } associateData (newItem, dataTags, "summary", "abstractNote"); associateData (newItem, dataTags, "mediaarticle", "publicationTitle"); newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var articles = new Array(); articles = [url]; Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('1eb5eb03-26ab-4015-bd0d-65487734744a', '1.0.0b4.r5', '', '2008-08-06 17:00:00', '0', '100', '4', 'Bibliotheque et Archives Nationale du Quebec (Pistard)', 'Adam Crymble', 'http://pistard.banq.qc.ca', 'function detectWeb (doc, url) { if (doc.title.match("Liste d├⌐taill├⌐e des fonds")) { return "multiple"; } else if (doc.title.match("Description fonds")) { return "book"; } }', '//Bibliotheque et Archives National du Quebec. Code by Adam Crymble function associateData (newItem, dataTags, field, zoteroField) { if (dataTags[field]) { newItem[zoteroField] = dataTags[field]; } } function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var dataTags = new Object(); var fieldTitle; var tagsContent= new Array(); var newItem = new Zotero.Item("book"); var headers = doc.evaluate(''//strong'', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathCount = doc.evaluate(''count (//strong)'', doc, nsResolver, XPathResult.ANY_TYPE, null); var contents = doc.evaluate(''//div[@id="Content"]/div/table'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; var headersArray = new Array(); var oneHeader = ''''; if (xPathCount.numberValue > 1) { for (var i = 0; i < xPathCount.numberValue; i++) { fieldTitle = headers.iterateNext().textContent; headersArray.push(fieldTitle); } } else { oneHeader = (headers.iterateNext().textContent); } var contentsArray = new Array(); var j = 0; if (oneHeader.length<1) { for (var i = headersArray.length-1; i> -1; i--) { var fieldIndex = contents.indexOf(headersArray[i]); var removeHeader = headersArray[i].length; contentsArray.push(contents.substr(fieldIndex)); contents = contents.substr(0, fieldIndex); fieldTitle = headersArray[i].replace(/\s+/g, ''''); dataTags[fieldTitle] = contentsArray[j].substr(removeHeader).replace(/^\s*|\s+$/g, ''''); j++; } } Zotero.debug(dataTags); if (dataTags["Titre,Dates,Quantit├⌐"]) { if (dataTags["Titre,Dates,Quantit├⌐"].match(/\n/)) { var splitTitle = dataTags["Titre,Dates,Quantit├⌐"].split(/\n/); if (splitTitle[0].match(/\w/)) { newItem.title = splitTitle[0].replace(/^\s*|\s+$/g, ''''); } for (var i = 0; i < splitTitle.length; i++) { if (splitTitle[i].match("/ ")) { var author = splitTitle[i].replace(/^\s*|\s+$/g, '''').substr(2); newItem.creators.push({lastName: author, creatorType: "creator"}); } } } } else { newItem.title = doc.title; } var k = 0; if (dataTags["Termesrattach├⌐s"]) { if (dataTags["Termesrattach├⌐s"].match(/\n/)) { tagsContent = dataTags["Termesrattach├⌐s"].split(/\n/); for (var i in tagsContent) { if (tagsContent[i].match(/\w/)) { newItem.tags[k] = tagsContent[i].replace(/^\s+|\s*$/g, ''''); k++; } } } else { newItem.tags[0] = dataTags["Termesrattach├⌐s"]; } } associateData (newItem, dataTags, "Languedesdocuments", "language"); associateData (newItem, dataTags, "Cote:", "callNumber"); associateData (newItem, dataTags, "Collation", "pages"); associateData (newItem, dataTags, "Centre:", "place"); associateData (newItem, dataTags, "Port├⌐eetcontenu", "abstractNote"); newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var titles = doc.evaluate(''//td[2]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_title; while (next_title = titles.iterateNext()) { if (next_title.href.match("description_fonds")) { items[next_title.href] = next_title.textContent; } } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('04c0db88-a7fc-4d1a-9cf7-471d0990acb1', '1.0.0b4.r5', '', '2008-08-06 17:00:00', '0', '100', '4', 'Christian Science Monitor', 'Adam Crymble', 'http://(features.csmonitor|www.csmonitor).com', 'function detectWeb(doc, url) { if (doc.location.href.match("search")) { return "multiple"; } else if (doc.location.href.match("features")) { return "newspaperArticle"; } else if (doc.evaluate(''//div[@id="storyContent"]/h1'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "newspaperArticle"; } }', '//Christian Science Monitor translator. Code by Adam Crymble. function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var newItem = new Zotero.Item("newspaperArticle"); if (doc.location.href.match("features.csmonitor")) { newItem.title = doc.title; if (doc.evaluate(''//div[@class="story"][@id="main"]/p/strong'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { newItem.abstractNote = doc.evaluate(''//div[@class="story"][@id="main"]/p/strong'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; } if (doc.evaluate(''//h3/span[@class="time-date"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { newItem.date = doc.evaluate(''//h3/span[@class="time-date"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.replace(" edition", ''''); } if (doc.evaluate(''//h3/span'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var author = doc.evaluate(''//h3/span'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; if (author.match("By ")) { author = author.substr(3); } newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author")); } var title1 = doc.title; //Some entries do not work for some reason unbeknownst to me; this flag catches the problem and prevents an error, but doesn''t save the data properly. if (title1.match("csmonitor")) { newItem.title = title1.substr(0, title1.length-15); } else { newItem.title = "This Entry Cannot Be Saved"; newItem.abstractNote = "Entry must be entered manually"; } } else { //title if (doc.evaluate(''//div[@id="storyContent"]/h1'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var title1 = doc.evaluate(''//div[@id="storyContent"]/h1'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; var words = title1.split(" "); for (var i in words) { words[i] = words[i][0].toUpperCase() + words[i].substr(1).toLowerCase(); } title1 = words.join(" "); newItem.title = title1; } else { newItem.title = "no title found"; } //abstract note if (doc.evaluate(''//div[@id="storyContent"]/h2'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { newItem.abstractNote = doc.evaluate(''//div[@id="storyContent"]/h2'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; } //date if (doc.evaluate(''//div[@id="storyContent"]/p[@class="postdate"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var date1 = doc.evaluate(''//div[@id="storyContent"]/p[@class="postdate"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; date1 = date1.replace(/from the /g, ''''); date1 = date1.replace(/ edition/g, ''''); newItem.date = date1; } //author if (doc.evaluate(''//address[@class="byline"]/strong'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var author = doc.evaluate(''//address[@class="byline"]/strong'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; if (author.match("By ")) { author = author.substr(3); } var words = author.split(" "); for (var i in words) { words[i] = words[i][0].toUpperCase() + words[i].substr(1).toLowerCase(); } author = words.join(" "); newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author")); } } newItem.publicationTitle = "Christian Science Monitor"; newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var titles = doc.evaluate(''//p[@id="searchResultRow"]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_title; while (next_title = titles.iterateNext()) { if (!next_title.href.match("features")) { items[next_title.href] = next_title.textContent; } } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('138de272-0d2a-4ab5-8cfb-0fd879958d04', '1.0.0b4.r5', '', '2008-07-25 17:40:00', '0', '100', '4', 'AdvoCAT', 'Adam Crymble', '^http://(142.57.32.51|library.lsuc.on.ca)', 'function detectWeb(doc, url) { if (doc.location.href.match("Search_Code")) { return "multiple"; } else if (doc.title.match("Record View")) { return "book"; } }', 'function associateData (newItem, dataTags, field, zoteroField) { if (dataTags[field]) { newItem[zoteroField] = dataTags[field]; } } function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var dataTags = new Object(); var fieldTitle; var newItem = new Zotero.Item("book"); var headers = doc.evaluate(''//table[2]/tbody/tr/th'', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathCount = doc.evaluate(''count (//table[2]/tbody/tr/th)'', doc, nsResolver, XPathResult.ANY_TYPE, null); var contents = doc.evaluate(''//table[2]/tbody/tr/td'', doc, nsResolver, XPathResult.ANY_TYPE, null); for (i=0; i<xPathCount.numberValue; i++) { fieldTitle = headers.iterateNext().textContent.replace(/\s+/g, ''''); if (!fieldTitle.match(/\w/)) { fieldTitle = "Blank" + i; } dataTags[fieldTitle] = Zotero.Utilities.cleanTags(contents.iterateNext().textContent.replace(/^\s*|\s*$/g, '''')); } if (dataTags["MainAuthor:"]) { var author = dataTags["MainAuthor:"]; if (author.match(", ") && !author.match(":")) { var authors = author.split(", "); author = authors[1] + " " + authors[0]; newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author")); } else { newItem.creators.push({lastName: author, creatorType: "creator"}); } } if (dataTags["Published:"]) { if (dataTags["Published:"].match(": ")) { var place1 = dataTags["Published:"].indexOf(": "); newItem.place = dataTags["Published:"].substr(0, place1); var publisher1 = dataTags["Published:"].substr(place1 + 2); if (publisher1.match(", ")) { var date1 = publisher1.lastIndexOf(", "); newItem.date = publisher1.substr(date1 +2); newItem.publisher = publisher1.substr(0, date1); } else { newItem.publisher = publisher1; } } else { newItem.publisher = publisher1; } } associateData (newItem, dataTags, "Title:", "title"); associateData (newItem, dataTags, "Database:", "repository"); associateData (newItem, dataTags, "Description:", "pages"); associateData (newItem, dataTags, "Edition:", "edition"); newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var titles = doc.evaluate(''//form[2]/table/tbody/tr/td[3]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_title; while (next_title = titles.iterateNext()) { items[next_title.href] = next_title.textContent; } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('add79dfd-7951-4c72-af1d-ce1d50aa4fb4', '1.0.0b4.r5', '', '2008-07-07 14:50:00', '0', '100', '4', 'informIT database', 'Adam Crymble', 'http://www.informit.com', 'function detectWeb(doc, url) { if (doc.title.match("Search Results")) { return "multiple"; } else if (doc.location.href.match("topics")) { return "multiple"; } else if (doc.location.href.match("product")) { return "book"; } else if (doc.location.href.match("guides")) { return "book"; } else if (doc.location.href.match("library")) { return "bookSection"; } else if (doc.location.href.match(/articles\/article/)) { return "bookSection"; } }', '//informIT database translator. Code by Adam Crymble function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var dataTags = new Object(); //FOR GUIDES if (doc.location.href.match("guides")) { var newItem = new Zotero.Item("book"); newItem.title = doc.evaluate(''//h1'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; var authors = doc.evaluate(''//div[@class="titling"]/p/a'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; } //FOR ARTICLES if (doc.location.href.match(/articles\/article/)) { var newItem = new Zotero.Item("bookSection"); var contents = doc.evaluate(''//div[@id="articleHeader"]/ul/li'', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathCount = doc.evaluate(''count (//div[@id="articleHeader"]/ul/li)'', doc, nsResolver, XPathResult.ANY_TYPE, null); var authors = contents.iterateNext().textContent.substr(3); if (doc.evaluate(''//div[@class="relatedBook"]/p/a'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { newItem.bookTitle = doc.evaluate(''//div[@class="relatedBook"]/p/a'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; } newItem.date = contents.iterateNext().textContent; var rights1; if (xPathCount.numberValue> 2) { newItem.rights = contents.iterateNext().textContent; } newItem.title = doc.evaluate(''//h1'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; } else if (doc.evaluate(''//ul[@class="bibliography"]/li'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { //FOR STORE BOOKS var newItem = new Zotero.Item("book"); var contents = doc.evaluate(''//ul[@class="bibliography"]/li'', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathCount = doc.evaluate(''count (//ul[@class="bibliography"]/li)'', doc, nsResolver, XPathResult.ANY_TYPE, null); for (i=0; i<xPathCount.numberValue; i++) { dataTags[i] = Zotero.Utilities.cleanTags(contents.iterateNext().textContent.replace(/^\s*|\s*$/g, '''')); } var authors = dataTags[0].substr(3); if (dataTags[1].match("Published")) { var publisherInfo = dataTags[1].substr(10); var date = publisherInfo.substr(0, 12); newItem.date = date; if (publisherInfo.match("by ")) { var publishCo = publisherInfo.split("by "); newItem.publisher = publishCo[1]; } } var extraStuff = dataTags[2].split(/\n/); var pageCut = extraStuff[0].indexOf("Pages"); var dimensions = extraStuff[0].substr(0, pageCut).split("Dimensions "); newItem.description = "Dimensions: " + dimensions[1]; newItem.pages = extraStuff[0].substr(pageCut+6); newItem.edition = extraStuff[1].replace(/Edition\:\s| \s\s*/g, ''''); newItem.ISBN = extraStuff[2].substr(31, 18); newItem.title = doc.evaluate(''//h1'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; //FOR LIBRARY BOOKS } else if (doc.location.href.match("library")) { var newItem = new Zotero.Item("bookSection"); newItem.title = doc.evaluate(''//h2'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; var meta = doc.evaluate(''//div[@id="columnOne"]/p'', doc, nsResolver, XPathResult.ANY_TYPE, null); newItem.bookTitle = meta.iterateNext().textContent; var authors = meta.iterateNext().textContent.substr(3); } //SHARED var noMoreAuthor = 0; if (authors.match(" and ")) { authors = authors.split(" and "); } else if (authors.match(", ")) { authors = authors.split(", "); } else { newItem.creators.push(Zotero.Utilities.cleanAuthor(authors, "author")); noMoreAuthor = 1; } if (authors.length>0 && noMoreAuthor != 1) { for (var i = 0; i < authors.length; i++) { newItem.creators.push(Zotero.Utilities.cleanAuthor(authors[i], "author")); } } newItem.url = doc.location.href; if (newItem.publisher) newItem.publisher = Zotero.Utilities.trimInternal(newItem.publisher); newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var next_title; //xPath for Topics pages, else xPaths for regular search pages. if (doc.location.href.match("topics")) { var titles = doc.evaluate(''//div[@class="productList articles"]/dl/dt/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); } else { var titles = doc.evaluate(''//td[3][@class="results"]/ul/li/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var chapters = doc.evaluate(''//dt/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); } while (next_title = titles.iterateNext()) { items[next_title.href] = next_title.textContent; } if (doc.title.match("Search Results")) { while (next_title = chapters.iterateNext()) { items[next_title.href] = next_title.textContent; } } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('587aa172-af1a-4cab-b188-2b6d392cae5c', '1.0', '', '2008-09-22 20:20:00', '0', '100', '4', 'Unidade de Biologia da Conserva├ºao', 'Giovanni Manghi and Michael Berkowitz', 'http://www.ubc.uevora.pt/', 'function detectWeb(doc, url) { if(doc.title == "UBC: referencia bibliografica") { return "book"; } else if (doc.evaluate(''//tr[@class]/td/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } }', 'function doWeb(doc, url) { if (detectWeb(doc, url) == "multiple") { var xpath = ''//tr[@class]/td/a''; var items = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null); var next_item; var arts = new Object(); while (next_item = items.iterateNext()) { arts[next_item.href] = Zotero.Utilities.trimInternal(next_item.textContent); } arts = Zotero.selectItems(arts); var newDocs = new Array(); for (var i in arts) { newDocs.push(i); } Zotero.debug(newDocs); Zotero.Utilities.processDocuments(newDocs, function(newDoc) { scrape(newDoc, newDoc.location.href); }, function() {Zotero.done();}); } else { scrape(doc,url); } } function scrape(doc,url) { var xpath = "/html/body/div/div/div[3]/div[3]/table/tbody/tr/td" var xpathurl ="/html/body/div/div/div[3]/div[3]/table/tbody/tr/td/a[1]" var allRefText = Zotero.Utilities.cleanString(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); var allRefTexturl = Zotero.Utilities.cleanString(doc.evaluate(xpathurl, doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); // bib data scraper code here function getItem(reftext,re) { var item = reftext.match(re); // Zotero.debug(item[1]); return item[1]; } var TipoRe = "Type:(.*?)Title"; var tipoo = getItem(allRefText,TipoRe); var titleRe = "Title:(.*?)Author"; var title = getItem(allRefText,titleRe); var authorsRe = "Author.*?: (.*?)Journal"; var authors = getItem(allRefText,authorsRe); var journalRe = "Journal:(.*?)Year"; var journal = getItem(allRefText,journalRe); var yearRe = "Year:(.*?)Volume"; var year = getItem(allRefText,yearRe); var volRe = "Volume:(.*?)Number"; var vol = getItem(allRefText,volRe); var numRe = "Number:(.*?)Pages"; var num = getItem(allRefText,numRe); var pageRe = "Pages:(.*?)Abstract"; var page = getItem(allRefText,pageRe); var abstractRe = "Abstract:(.*?)Keywords"; var abstract = getItem(allRefText,abstractRe); var keyRe = "Keywords:(.*?)Link"; var key = getItem(allRefText,keyRe); // zotero entry creation code here itemTypeMap = { article:"journalArticle", book:"book", conference:"conferencePaper", inproceedings:"conferencePaper", inbook:"bookSection", incollection:"bookSection", mastersthesis:"thesis", other:"journalArticle", phdthesis:"thesis", proceedings:"conferencePaper" }; if (itemTypeMap[tipoo]) { tipooo = itemTypeMap[tipoo]; } else { tipooo = ''document''; } var newArticle = new Zotero.Item(tipooo); var aus = authors.split(","); for (var i=0; i< aus.length ; i++) { newArticle.creators.push(Zotero.Utilities.cleanAuthor(aus[i],"author")); } newArticle.title = title; newArticle.publicationTitle = journal; newArticle.date = year; newArticle.volume = vol; newArticle.issue = num; newArticle.pages = page; newArticle.abstractNote = abstract; newArticle.keywords = key; newArticle.url = url; newArticle.complete(); }'); REPLACE INTO translators VALUES ('e9632edc-8032-4dc5-b2d4-284d481583e6', '1.0', '', '2008-08-06 17:00:00', '0', '100', '4', 'SAE International', 'Michael Berkowitz', 'http://www.sae.org/', 'function detectWeb(doc, url) { if (doc.evaluate(''//td[2][@class="search-results"]/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else if (url.match(/\/books\//)) {return "book";} else if (url.match(/\/papers\//)) {return "conferencePaper";} }', 'function doWeb(doc, url) { var arts = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var links = doc.evaluate(''//td[2][@class="search-results"]/a'', doc, null, XPathResult.ANY_TYPE, null); var link; while (link = links.iterateNext()) { items[link.href] = link.textContent; } items = Zotero.selectItems(items); for (var i in items) { arts.push(i); } } else { arts = [url]; } Zotero.Utilities.processDocuments(arts, function(doc) { var type = detectWeb(doc, doc.location.href); if (type == "paper") { var data = new Object(); var metas = doc.evaluate(''//meta'', doc, null, XPathResult.ANY_TYPE, null); var meta; while (meta = metas.iterateNext()) { name = meta.name; content = meta.content; if (data[name]) { data[name] = data[name] + ";" + content; } else { data[name] = content; } } var item = new Zotero.Item("conferencePaper"); item.title = doc.evaluate(''//title'', doc, null, XPathResult.ANY_TYPe, null).iterateNext().textContent; item.data = data[''publ_date'']; item.url = data[''identifier_url'']; var authors = data[''author''].split(/\s+;/); for each (var aut in authors) { item.creators.push(Zotero.Utilities.cleanAuthor(aut, "author")); } item.abstractNote = Zotero.Utilities.trimInternal(doc.evaluate(''//td[1][@class="spg spg-left"]/p[strong[contains(text(), "Abstract")]]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent.substr(9)); } else if (type = "book") { var item = new Zotero.Item("book"); var data = doc.evaluate(''//p[strong[contains(text(), "ISBN")]]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent; item.ISBN = data.match(/ISBN Number:\s+([\d\-]+)/)[1]; item.date = data.match(/Date Published:\s+(.*)\n/)[1]; item.url = doc.location.href; item.title = Zotero.Utilities.trimInternal(doc.evaluate(''//title'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); item.abstractNote = Zotero.Utilities.trimInternal(doc.evaluate(''//td[1][@class="spg spg-left"]/p[contains(text(), ".")]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); } item.attachments = [{url:item.url, title:item.title, mimeType:"text/html"}]; item.complete(); }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('48d3b115-7e09-4134-ad5d-0beda6296761', '1.0', '', '2008-08-06 17:00:00', '0', '100', '4', 'SPIE Digital Library', 'Michael Berkowitz', 'http://spiedl.aip.org/', 'function detectWeb(doc, url) { if (doc.evaluate(''//table[@class="searchResultsTable"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else if (doc.evaluate(''//div[@id="articletoolsdisplay"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "journalArticle"; } }', '//http://spiedl.aip.org/getabs/servlet/GetCitation?fn=view_isi&source=scitation&PrefType=ARTICLE&PrefAction=Add+Selected&SelectCheck=JBOPFO000013000002024024000001&downloadcitation=+Go+ function doWeb(doc, url) { var arts = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var results = doc.evaluate(''//table[@class="searchResultsTable"]/tbody/tr'', doc, null, XPathResult.ANY_TYPE, null); var result; while (result = results.iterateNext()) { var title = doc.evaluate(''.//td[3]/a[1]'', result, null, XPathResult.ANY_TYPE, null).iterateNext().textContent; var id = doc.evaluate(''.//td[2]/input'', result, null, XPathResult.ANY_TYPE, null).iterateNext().value; items[id] = title; } items = Zotero.selectItems(items); for (var i in items) { arts.push(i); } } else { var id = doc.evaluate(''//input[@name="SelectCheck"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().value; arts = [id]; } var getstr1 = ''http://'' + doc.location.host + ''/getabs/servlet/GetCitation?fn=view_isi&source=scitation&PrefType=ARTICLE&PrefAction=Add+Selected&SelectCheck=''; var getstr2 = ''&downloadcitation=+Go+''; for each (var id in arts) { var get = getstr1 + id + getstr2; Zotero.Utilities.HTTP.doGet(get, function(text) { Zotero.debug(text); var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.translate(); }); } }'); REPLACE INTO translators VALUES ('87766765-919e-4d3b-9071-3dd7efe984c8', '1.0.0b4.r5', '', '2008-07-16 20:10:00', '1', '100', '4', 'Revues.org', 'Michael Berkowitz', 'http://.*\.revues\.org', 'function detectWeb(doc, url) { if (doc.evaluate(''//div[@id="inside"]/div[@class="sommaire"]/dl[@class="documents"]/dd[@class="titre"]/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext() || doc.evaluate(''//ul[@class="summary"]//div[@class="title"]/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else if (doc.evaluate(''//h1[@id="docTitle"]/span[@class="text"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext() || url.match(/document\d+/)) { return "journalArticle"; } }', 'function doWeb(doc, url) { var arts = new Array(); if (detectWeb(doc, url) == "multiple") { if (doc.evaluate(''//ul[@class="summary"]//div[@class="title"]/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { var xpath = ''//ul[@class="summary"]//div[@class="title"]/a''; } else if (doc.evaluate(''//div[@id="inside"]/div[@class="sommaire"]/dl[@class="documents"]/dd[@class="titre"]/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { var xpath = ''//div[@id="inside"]/div[@class="sommaire"]/dl[@class="documents"]/dd[@class="titre"]/a''; } var titles = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null); var title; var items = new Object(); while (title = titles.iterateNext()) { items[title.href] = title.textContent; } items = Zotero.selectItems(items); for (var i in items) { arts.push(i); } } else { arts = [url]; } Zotero.Utilities.processDocuments(arts, function(doc) { var metas = doc.evaluate(''//meta'', doc, null, XPathResult.ANY_TYPE, null); var meta; var data = new Object(); while (meta = metas.iterateNext()) { if (data[meta.name]) { data[meta.name.toLowerCase()] = data[meta.name.toLowerCase()] + ";" + meta.content; } else { data[meta.name.toLowerCase()] = meta.content } } var item = new Zotero.Item("journalArticle"); item.url = data[''url'']; var authors = data[''author''].split('';''); for each (var aut in authors) { if (aut.match(/\w+/)) item.creators.push(Zotero.Utilities.cleanAuthor(aut.replace(/(.*)\s([^\s]+)$/, "$2 $1"), "author")); } item.tags = data[''dc.subject''].split(/,\s+/); item.date = data[''dc.date'']; item.title = data[''dc.title'']; if (data[''dc.relation.ispartof'']) item.publicationTitle = data[''dc.relation.ispartof''].match(/^[^,]+/)[0]; item.abstractNote = data[''description'']; if (!item.abstractNote && data[''dc.description'']) item.abstractNote = data[''dc.description'']; item.complete(); }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('daa26181-71d4-48ef-8cac-54c06ff4c20e', '1.0.0b4.r5', '', '2008-07-07 23:40:00', '0', '100', '4', 'Citebase', 'Michael Berkowitz', 'http://(www.)?citebase.org/', 'function detectWeb(doc, url) { if (url.match(/\/search/)) { return "multiple"; } else if (url.match(/\/abstract/)) { return "journalArticle"; } }', 'function doWeb(doc, url) { var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var links = doc.evaluate(''//div[@class="rs_match"]/div/a[@class="abs_title"]'', doc, null, XPathResult.ANY_TYPE, null); var items = new Object(); var link; while (link = links.iterateNext()) { items[link.href] = link.textContent; } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, function(doc) { var biburl = doc.evaluate(''//a[contains(text(), "BibTeX")]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().href; if (doc.evaluate(''/html/body/div[@class="body"]/div[@class="abstract"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) var abs = Zotero.Utilities.trimInternal(doc.evaluate(''/html/body/div[@class="body"]/div[@class="abstract"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); var translator = Zotero.loadTranslator("import"); translator.setTranslator("9cb70025-a888-4a29-a210-93ec52da40d4"); Zotero.Utilities.HTTP.doGet(biburl, function(text) { translator.setString(text); translator.setHandler("itemDone", function(obj, item) { if (abs) { if (abs.match(/^Abstract/)) { item.abstractNote = abs.substr(9); } else { item.abstractNote = abs; } } item.attachments = [{url:item.url, title:"Citebase Snapshot", mimeType:"text/html"}]; item.complete(); }); translator.translate(); }); }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('dd149efc-7f0e-43e4-b3df-b6d15e171717', '1.0.0b4.r5', '', '2008-07-15 19:40:00', '0', '100', '4', 'Pers├⌐e', 'Adam Crymble', 'http://www.persee.fr', 'function detectWeb(doc, url) { if (doc.location.href.match("search") && doc.evaluate(''//div[@id="searchResults"]/div[@class="oneResult"]/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else if (doc.location.href.match("article")) { return "journalArticle"; } }', '//Persee Translator. Code by Adam Crymble function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var newItem = new Zotero.Item("journalArticle"); newItem.url = doc.location.href; newItem.title = doc.evaluate(''//div[@class="oneResult"]/h2'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.replace(/^\s*|\s+$/g, ''''); //various journal info if (doc.title.match(", ")) { var contents = doc.title.split(", "); newItem.publicationTitle = contents[0].substr(9); for (var i = 1; i < contents.length; i++) { if (contents[i].match("Year ")) { newItem.date = contents[i].substr(5); } else if (contents[i].match("Volume ")) { newItem.volume = contents[i].substr(7); } else if (contents[i].match("Issue ")) { newItem.issue = contents[i].substr(6); } else if (contents[i].match("pp. ")) { newItem.pages = contents[i].substr(4); } } } //authors var getAuthors = doc.evaluate(''//div[@class="oneResult"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.replace(/^\s*|\s+$/g, ''''); var chopAuthors1 = getAuthors.indexOf(newItem.title) + newItem.title.length; var chopAuthors2 = getAuthors.indexOf(newItem.publicationTitle); var authors = getAuthors.substr(chopAuthors1, chopAuthors2-chopAuthors1); if (authors.match(", ")) { authors = authors.split(", "); for (var i in authors) { newItem.creators.push(Zotero.Utilities.cleanAuthor(authors[i], "author")); } } else { newItem.creators.push(Zotero.Utilities.cleanAuthor(authors, "author")); } newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc,url) == "journalArticle") { articles = [url]; } else if (detectWeb(doc, url) == "multiple") { var items = new Object(); var titles = doc.evaluate(''//div[@id="searchResults"]/div[@class="oneResult"]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_title; var titlesArray = new Array(); var linksArray = new Array(); while (next_title = titles.iterateNext()) { titlesArray.push(next_title.textContent.replace(/^\s*|\s+$/g, '''')); linksArray.push(next_title.href); } for (var i = 0; i < titlesArray.length; i++) { if (linksArray[i].match("article")) { items[linksArray[i]] = titlesArray[i]; } } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('9932d1a7-cc6d-4d83-8462-8f6658b13dc0', '1.0.0b4.r5', '', '2008-07-07 14:50:00', '0', '100', '4', 'Biblio.com', 'Adam Crymble and Michael Berkowitz', 'http://www.biblio.com/', 'function detectWeb(doc, url) { if (doc.location.href.match("bookseller_search") || doc.location.href.match("bookstores") || doc.location.href.match("textbooks")) { } else if (doc.location.href.match("search")) { return "multiple"; } else if (doc.location.href.match("books")) { return "book"; } }', '//Biblio.com translator. Code by Adam Crymble. function associateData (newItem, dataTags, field, zoteroField) { if (dataTags[field]) { newItem[zoteroField] = dataTags[field]; } } function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var dataTags = new Object(); var contents = new Array(); var multiAuthors = new Array(); var fieldTitle; var author1; var newItem = new Zotero.Item("book"); var content = doc.evaluate(''//div[@class="smalltext1"][@id="infobox"]/ul/li'', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathCount = doc.evaluate(''count (//div[@class="smalltext1"][@id="infobox"]/ul/li)'', doc, nsResolver, XPathResult.ANY_TYPE, null); for (i=0; i<xPathCount.numberValue; i++) { contents = content.iterateNext().textContent.split(": "); fieldTitle = contents[0].replace(/\s*/g, ''''); dataTags[fieldTitle] = contents[1].replace(/^\s*|\s*$/g, ''''); } //Authors if (doc.evaluate(''//td[2]/h3'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var authors = doc.evaluate(''//td[2]/h3'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; if (authors.match(/\w/)) { if (authors.match(/^ by/)) { authors = authors.substr(4); if (authors.match(/;/)) { multiAuthors = authors.split(";"); Zotero.debug(multiAuthors); for each (var aut in multiAuthors) { newItem.creators.push(Zotero.Utilities.cleanAuthor(aut, "author", true)); } } else { newItem.creators.push(Zotero.Utilities.cleanAuthor(authors, "author", true)); } } else { newItem.creators.push(Zotero.Utilities.cleanAuthor(authors, "author")); } } } //extra if (dataTags["Quantityavailable"]) { newItem.extra = "Quantity Available: " + dataTags["Quantityavailable"]; } associateData (newItem, dataTags, "Publisher", "publisher"); associateData (newItem, dataTags, "Place", "place"); associateData (newItem, dataTags, "Datepublished", "date"); associateData (newItem, dataTags, "ISBN10", "ISBN"); associateData (newItem, dataTags, "ISBN13", "ISBN"); associateData (newItem, dataTags, "Pages", "pages"); associateData (newItem, dataTags, "Edition", "edition"); newItem.title = doc.evaluate(''//tbody/tr[1]/td[2]/h1'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.replace(/^\s*|\s&+/g, ''''); newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var titles = doc.evaluate(''//table[@class="search-result"]/tbody/tr/td[2]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_title; while (next_title = titles.iterateNext()) { if (next_title.textContent.match(/\w/)) { items[next_title.href] = next_title.textContent; } } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('9932d1a7-cc6d-4d83-8462-8f6658b13dc0', '1.0.0b4.r5', '', '2008-07-07 14:50:00', '0', '100', '4', 'Biblio.com', 'Adam Crymble and Michael Berkowitz', 'http://www.biblio.com/', 'function detectWeb(doc, url) { if (doc.location.href.match("bookseller_search") || doc.location.href.match("bookstores") || doc.location.href.match("textbooks")) { } else if (doc.location.href.match("search")) { return "multiple"; } else if (doc.location.href.match("books")) { return "book"; } }', '//Biblio.com translator. Code by Adam Crymble. function associateData (newItem, dataTags, field, zoteroField) { if (dataTags[field]) { newItem[zoteroField] = dataTags[field]; } } function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var dataTags = new Object(); var contents = new Array(); var multiAuthors = new Array(); var fieldTitle; var author1; var newItem = new Zotero.Item("book"); var content = doc.evaluate(''//div[@class="smalltext1"][@id="infobox"]/ul/li'', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathCount = doc.evaluate(''count (//div[@class="smalltext1"][@id="infobox"]/ul/li)'', doc, nsResolver, XPathResult.ANY_TYPE, null); for (i=0; i<xPathCount.numberValue; i++) { contents = content.iterateNext().textContent.split(": "); fieldTitle = contents[0].replace(/\s*/g, ''''); dataTags[fieldTitle] = contents[1].replace(/^\s*|\s*$/g, ''''); } //Authors if (doc.evaluate(''//td[2]/h3'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var authors = doc.evaluate(''//td[2]/h3'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; if (authors.match(/\w/)) { if (authors.match(/^ by/)) { authors = authors.substr(4); if (authors.match(/;/)) { multiAuthors = authors.split(";"); Zotero.debug(multiAuthors); for each (var aut in multiAuthors) { newItem.creators.push(Zotero.Utilities.cleanAuthor(aut, "author", true)); } } else { newItem.creators.push(Zotero.Utilities.cleanAuthor(authors, "author", true)); } } else { newItem.creators.push(Zotero.Utilities.cleanAuthor(authors, "author")); } } } //extra if (dataTags["Quantityavailable"]) { newItem.extra = "Quantity Available: " + dataTags["Quantityavailable"]; } associateData (newItem, dataTags, "Publisher", "publisher"); associateData (newItem, dataTags, "Place", "place"); associateData (newItem, dataTags, "Datepublished", "date"); associateData (newItem, dataTags, "ISBN10", "ISBN"); associateData (newItem, dataTags, "ISBN13", "ISBN"); associateData (newItem, dataTags, "Pages", "pages"); associateData (newItem, dataTags, "Edition", "edition"); newItem.title = doc.evaluate(''//tbody/tr[1]/td[2]/h1'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.replace(/^\s*|\s&+/g, ''''); newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var titles = doc.evaluate(''//table[@class="search-result"]/tbody/tr/td[2]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_title; while (next_title = titles.iterateNext()) { if (next_title.textContent.match(/\w/)) { items[next_title.href] = next_title.textContent; } } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('f39dbd1c-229e-4abb-8414-a09fdbda37b7', '1.0.0b4.r5', '', '2008-06-29 21:10:00', '0', '100', '4', 'Archives Network of Alberta', 'Adam Crymble', 'http://208.38.46.62:8080/', 'function detectWeb(doc, url) { var xPathH3 = doc.evaluate(''//h3'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent; if (xPathH3.match("Search Results")) { return "multiple"; } else if (xPathH3.match("Display")) { return "book"; } }', '//Archives Network of Alberta translator. Code by Adam Crymble function associateData (newItem, dataTags, field, zoteroField) { if (dataTags[field]) { newItem[zoteroField] = dataTags[field]; } } function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var newItem = new Zotero.Item("book"); var dataTags = new Object(); var manyAuthors = new Array(); var tagsContent = new Array(); var tagsContent1 = new Array(); var xPathHeaders = doc.evaluate(''//td[1][@class="datalabel"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathContent = doc.evaluate(''//td[2][@class="datatext"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathCount = doc.evaluate(''count (//td[1][@class="datalabel"])'', doc, nsResolver, XPathResult.ANY_TYPE, null); for (var i = 0; i < xPathCount.numberValue; i++) { fieldTitle = xPathHeaders.iterateNext().textContent.replace(/\s+/g, ''''); if (fieldTitle =="Provenance:") { dataTags[fieldTitle] = (xPathContent.iterateNext().textContent.replace(/^\s*|\s*$/g, '''')); if (dataTags[fieldTitle].match("; ")) { manyAuthors = dataTags[fieldTitle].split("; "); } else { manyAuthors.push(dataTags[fieldTitle]); } Zotero.debug(manyAuthors); for (var j = 0; j < manyAuthors.length; j++) { if (manyAuthors[j].match(", ")) { var authorName = manyAuthors[j].split(","); authorName[0] = authorName[0].replace(/^\s*|\s*$/g, ''''); authorName[1] = authorName[1].replace(/^\s*|\s*$/g, ''''); newItem.creators.push(Zotero.Utilities.cleanAuthor((authorName[1] + (" ") + authorName[0]), "author")); } else { newItem.creators.push({lastName: manyAuthors[j], creatorType: "creator"}); } } } else if (fieldTitle == "Partof:") { dataTags[fieldTitle] = ("Part of " + Zotero.Utilities.cleanTags(xPathContent.iterateNext().textContent.replace(/^\s*|\s*$/g, ''''))); } else if (fieldTitle == "OnlineFindingAid:") { dataTags[fieldTitle] = ("Online Finding Aid: " + xPathContent.iterateNext().textContent); Zotero.debug(dataTags["OnlineFindingAid:"]); } else if (fieldTitle == "Names:") { dataTags[fieldTitle] = (xPathContent.iterateNext().textContent.replace(/^\s*|\s*$/g, '''')); tagsContent = dataTags[fieldTitle].split(";"); } else if (fieldTitle == "Topic:") { dataTags[fieldTitle] = (xPathContent.iterateNext().textContent.replace(/^\s*|\s*$/g, '''')); tagsContent1 = dataTags[fieldTitle].split(", "); } else { dataTags[fieldTitle] = Zotero.Utilities.cleanTags(xPathContent.iterateNext().textContent.replace(/^\s*|\s*$/g, '''')); } } for (i = 0; i < tagsContent.length; i++) { tagsContent[i] = tagsContent[i].replace(/^\s*|\s*$/g, ''''); newItem.tags[i] = tagsContent[i]; } for (i = 0; i < tagsContent1.length; i++) { newItem.tags.push(tagsContent1[i]); } associateData (newItem, dataTags, "Title:", "title"); associateData (newItem, dataTags, "Dates:", "date"); associateData (newItem, dataTags, "Physicaldesc.:", "pages"); associateData (newItem, dataTags, "Repository:", "repository"); associateData (newItem, dataTags, "Scope/Content:", "abstractNote"); associateData (newItem, dataTags, "Partof:", "series"); associateData (newItem, dataTags, "OnlineFindingAid:", "extra"); associateData (newItem, dataTags, "Language:", "language"); associateData (newItem, dataTags, "RecordNo.:", "callNumber"); newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var xPathTitles = doc.evaluate(''//tr[1]/td[2][@class="datatext"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var nextTitle; var xPathLinks = doc.evaluate(''//td[1][@class="dataleft"]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); while (nextTitle = xPathTitles.iterateNext()) { items[xPathLinks.iterateNext().href] = nextTitle.textContent; } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('a29d22b3-c2e4-4cc0-ace4-6c2326144332', '1.0.0b4.r5', '', '2008-06-29 21:10:00', '0', '100', '4', 'CABI - CAB Abstracts', 'Adam Crymble', 'http://www.cabi.org/', 'function detectWeb(doc, url) { if (doc.evaluate(''//div/table/tbody/tr[1]/td/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else if (doc.evaluate(''//span[@class="PageSubTitle"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "book"; } }', '//CAB Abstracts translator. Code by Adam Crymble //only designed for "book" entries. People, projects, sites, etc are ignored by Zotero. function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var newItem = new Zotero.Item("book"); //authors if (doc.evaluate(''//td[@class="smallwebtext"]/table/tbody/tr/td[1]/span[@class="MenuBar"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var xPathAuthors = doc.evaluate(''//td[@class="smallwebtext"]/table/tbody/tr/td[1]/span[@class="MenuBar"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPath1Count = doc.evaluate(''count (//td[@class="smallwebtext"]/table/tbody/tr/td[1]/span[@class="MenuBar"])'', doc, nsResolver, XPathResult.ANY_TYPE, null); var nameTest = 0; for (var j = 0; j < xPath1Count.numberValue; j++) { authors = xPathAuthors.iterateNext().textContent if (authors.match("by ")) { var shortenAuthor = authors.indexOf("by ")+3; authors = authors.substr(shortenAuthor).split("; "); for (var i = 0; i < authors.length; i++) { shortenAuthor = authors[i].indexOf(","); authors[i] = (authors[i].substr(0, shortenAuthor)); var givenName = (authors[i].split(/\s/)); authors[i] = ''''; for (var k = 0; k < givenName.length; k++) { if (givenName[k].length == 1) { authors[i] = (authors[i] + givenName[k] + "."); } else { authors[i] = (authors[i] + " " + givenName[k]); } } newItem.creators.push(Zotero.Utilities.cleanAuthor(authors[i], "author")); } } } } //imprint info var info = new Array(); if (doc.evaluate(''//td[3]/table/tbody/tr/td[@class="MenuBar"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var xPathImprint = doc.evaluate(''//td[3]/table/tbody/tr/td[@class="MenuBar"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var imprint = xPathImprint.iterateNext().textContent.split(/\n/); for (var i = 0; i < imprint.length; i++) { imprint[i] = imprint[i].replace(/^\s*|\s*$/g, ''''); if (imprint[i].match(/\w/)) { info.push(imprint[i]); } } for (var i = 0; i < info.length; i++) { if (info[i].match("pages")) { var cutPages = info[i].indexOf("pages"); newItem.pages = info[i].substr(0, cutPages); } else if (info[i].match("Date:")) { newItem.date = info[i].substr(10); } else if (info[i].match("ISBN: ")) { newItem.ISBN = info[i].substr(6); } } } newItem.title = doc.title; newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var titles = doc.evaluate(''//tr[1]/td/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var mediaType = doc.evaluate(''//strong'', doc, nsResolver, XPathResult.ANY_TYPE, null); var dump = mediaType.iterateNext(); var next_title; while (next_title = titles.iterateNext()) { items[next_title.href] = mediaType.iterateNext().textContent; if (items[next_title.href].match("Book")) { items[next_title.href] = next_title.textContent; } } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('a7c8b759-6f8a-4875-9d6e-cc0a99fe8f43', '1.0.0b4.r5', '', '2008-06-20 20:45:00', '0', '100', '4', 'Canadian Letters and Images', 'Adam Crymble', 'http://(www.)?canadianletters.ca/', 'function detectWeb(doc, url) { if (doc.location.href.match("results")) { return "multiple"; } else if (doc.location.href.match("letters.php")) { return "document"; } else if (doc.location.href.match("template")) { return "artwork"; } }', '//Translator for Canadian Letters and Images. Code by Adam Crymble function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var dataTags = new Object(); var mediaType = (detectWeb(doc, url)); if (mediaType == "document") { var newItem = new Zotero.Item("letter"); var title2; //title if (doc.evaluate(''//h3'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { newItem.title = doc.evaluate(''//h3'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; } else { newItem.title = doc.title; } //letter, diary, memoir, personal item if (doc.evaluate(''//div[@id="collectionCategory_letters"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var xPathType = doc.evaluate(''//div[@id="collectionCategory_letters"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; newItem.type = xPathType; } //gets date, to and from if (doc.evaluate(''//div[@class="letterInfo_label"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var xPathHeaders = doc.evaluate(''//div[@class="letterInfo_label"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathContent = doc.evaluate(''//div[@class="letterInfo_title"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathCount = doc.evaluate(''count (//div[@class="letterInfo_label"])'', doc, nsResolver, XPathResult.ANY_TYPE, null); for (i=0; i<xPathCount.numberValue; i++) { fieldTitle=xPathHeaders.iterateNext().textContent.replace(/\s+/g, ''''); dataTags[fieldTitle] = xPathContent.iterateNext().textContent.replace(/^\s*|\s*$/g, ''''); if (fieldTitle == "To:") { newItem.abstractNote = ("To: " + dataTags[fieldTitle]); } else if (fieldTitle == "From:") { newItem.creators.push(Zotero.Utilities.cleanAuthor(dataTags[fieldTitle], "author")); } else if (fieldTitle == "Date:") { newItem.date = dataTags[fieldTitle]; } } } } else if (mediaType == "artwork") { newItem = new Zotero.Item("artwork"); if (doc.evaluate(''//div[@class="pictureDisplay"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { newItem.title = doc.evaluate(''//div[@class="pictureDisplay"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; } else { newItem.title = doc.title; } } newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var titles = doc.evaluate(''//div[@class="searchResultsDisplay"]/div/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_title; while (next_title = titles.iterateNext()) { items[next_title.href] = next_title.textContent; } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('3f44a651-8b6b-4591-8ca4-4bfb943a13f4', '1.0.0b4.r5', '', '2008-06-20 20:45:00', '0', '100', '4', 'Edutopia', 'Adam Crymble', 'http://www.edutopia.org', 'function detectWeb(doc, url) { var blog1 = 0; if (doc.title.match("blog")) { blog1 = 1; } if (doc.location.href.match("search")) { return "multiple"; } else if (blog1 == 0 && doc.evaluate(''//h1'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "newspaperArticle"; } }', '//Edutopia.org translator. Code by Adam Crymble function associateMeta(newItem, metaTags, field, zoteroField) { if(metaTags[field]) { newItem[zoteroField] = metaTags[field]; } } function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var author; var authorCheck = 0; var tagsContent = new Array(); var newItem = new Zotero.Item("newspaperArticle"); //title var title1 = doc.title.split("|"); newItem.title = title1[0]; //author if (doc.evaluate(''//div[@id="article"]/h4/a'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { author = doc.evaluate(''//div[@id="article"]/h4/a'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; authorCheck = 1; } else if (doc.evaluate(''//div[@id="pollpage"]/p/a'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { author = doc.evaluate(''//div[@id="pollpage"]/p/a'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; authorCheck = 1; } else if (doc.evaluate(''//div[@class="blog"]/h4'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { author = doc.evaluate(''//div[@class="blog"]/h4'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; authorCheck = 1; } if (authorCheck == 1) { if (author.toLowerCase().match(/^by /)) { author = author.substr(3); } Zotero.debug(author); newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author")); } //abstract if (doc.evaluate(''//div[@class="dek"]/h3'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { newItem.abstractNote = (doc.evaluate(''//div[@class="dek"]/h3'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent); } //date if (doc.evaluate(''/span[@class="blog_date"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { newItem.date = doc.evaluate(''/span[@class="blog_date"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; } var metaTags = new Object(); var metaTagHTML = doc.getElementsByTagName("meta"); for (var i = 0 ; i < metaTagHTML.length ; i++) { metaTags[metaTagHTML[i].getAttribute("name")] = Zotero.Utilities.cleanTags(metaTagHTML[i].getAttribute("content")); } if (metaTags["keywords"]) { tagsContent = (metaTags["keywords"].split('', '')); } for (var i = 0; i < tagsContent.length; i++) { newItem.tags[i] = tagsContent[i]; } associateMeta (newItem, metaTags, "description", "abstractNote"); newItem.publication = "Edutopia.org" newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var titles = doc.evaluate(''//dt[@class="title"]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_title; while (next_title = titles.iterateNext()) { items[next_title.href] = next_title.textContent; } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('18bc329c-51af-497e-a7cf-aa572fae363d', '1.0.0b4.r5', '', '2008-06-20 20:45:00', '0', '100', '4', 'Archives Canada', 'Adam Crymble', 'http://(www.)?archivescanada.ca', 'function detectWeb (doc, url) { if (doc.location.href.match("RouteRqst")) { return "multiple"; } else if (doc.location.href.match("ItemDisplay")) { return "book"; } }', 'function associateData (newItem, dataTags, field, zoteroField) { if (dataTags[field]) { newItem[zoteroField] = dataTags[field]; } } function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var dataTags = new Object(); var tagsContent = new Array(); var cainNo; var newItem = new Zotero.Item("book"); var data = doc.evaluate(''//td/p'', doc, nsResolver, XPathResult.ANY_TYPE, null); var dataCount = doc.evaluate(''count (//td/p)'', doc, nsResolver, XPathResult.ANY_TYPE, null); for (i=0; i<dataCount.numberValue; i++) { data1 = data.iterateNext().textContent.replace(/^\s*|\s*$/g, '''').split(":"); fieldTitle = data1[0].replace(/\s+/g, ''''); if (fieldTitle == "PROVENANCE") { var multiAuthors = data1[1].split(/\n/); for (var j = 0; j < multiAuthors.length; j++) { if (multiAuthors[j].match(",")) { var authorName = multiAuthors[j].replace(/^\s*|\s*$/g, '''').split(","); authorName[0] = authorName[0].replace(/\s+/g, ''''); dataTags["PROVENANCE"] = (authorName[1] + (" ") + authorName[0]); newItem.creators.push(Zotero.Utilities.cleanAuthor(dataTags["PROVENANCE"], "author")); } else { newItem.creators.push({lastName: multiAuthors[j].replace(/^\s*|\s*$/g, ''''), creatorType: "creator"}); } } } else if (fieldTitle == "SUBJECTS" | fieldTitle == "MATI├êRES") { tagsContent = data1[1].split(/\n/); } else { dataTags[fieldTitle] = data1[1]; } } if (doc.evaluate(''//tr[3]/td/table/tbody/tr[1]/td/table/tbody/tr[2]/td/table/tbody/tr/td[1]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { cainNo = doc.evaluate(''//tr[3]/td/table/tbody/tr[1]/td/table/tbody/tr[2]/td/table/tbody/tr/td[1]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; newItem.extra = cainNo.replace(/^\s*|\s*$/g, ''''); } for (var i = 0; i < tagsContent.length; i++) { newItem.tags[i] = tagsContent[i].replace(/^\s*|\s*$/g, ''''); } associateData (newItem, dataTags, "TITLE", "title" ); associateData (newItem, dataTags, "REPOSITORY", "repository" ); associateData (newItem, dataTags, "RETRIEVALNUMBER", "callNumber" ); associateData (newItem, dataTags, "DATES", "date" ); associateData (newItem, dataTags, "SCOPEANDCONTENT", "abstractNote" ); associateData (newItem, dataTags, "LANGUAGE", "language" ); associateData (newItem, dataTags, "LANGUE", "language" ); associateData (newItem, dataTags, "TITRE", "title" ); associateData (newItem, dataTags, "CENTRED''ARCHIVES", "repository" ); associateData (newItem, dataTags, "NUM├ëROD''EXTRACTION", "callNumber" ); associateData (newItem, dataTags, "PORT├ëEETCONTENU", "abstractNote" ); newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var titles = doc.evaluate(''//td[3]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_title; while (next_title = titles.iterateNext()) { items[next_title.href] = next_title.textContent; } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('c76d6c19-b4c6-4e51-bd7a-0a81752305ae', '1.0.0b4.r5', '', '2008-06-20 20:45:00', '0', '100', '4', 'BC Archival Information Network', 'Adam Crymble', 'http://(mayne.)?aabc.bc.ca/', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var entryType = (doc.evaluate(''/html/body/h3'', doc, nsResolver, XPathResult.ANY_TYPE, null)); if (entryType.iterateNext()) { var entryType1 = entryType.iterateNext().textContent; if (entryType1.match("Search") && entryType1 != ("Search Results - BCAUL Repositories")) { return "multiple"; } else if (entryType1.match("Display") && entryType1 != ("Display - BCAUL Repositories") && doc.location.href.match("display")) { return "book"; } } }', '//BCAIN translator. Code by Adam Crymble function associateData (newItem, dataTags, field, zoteroField) { if (dataTags[field]) { newItem[zoteroField] = dataTags[field]; } } function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var newItem = new Zotero.Item("book"); var dataTags = new Object(); var manyAuthors = new Array(); var tagsContent = new Array(); var xPathHeaders = doc.evaluate(''//td[1][@class="datalabel"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathContent = doc.evaluate(''//td[2][@class="datatext"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathCount = doc.evaluate(''count (//td[1][@class="datalabel"])'', doc, nsResolver, XPathResult.ANY_TYPE, null); Zotero.debug(xPathCount.numberValue); for (var i = 0; i < xPathCount.numberValue; i++) { fieldTitle = xPathHeaders.iterateNext().textContent.replace(/\s+/g, ''''); if (fieldTitle =="Provenance:") { dataTags[fieldTitle] = (xPathContent.iterateNext().textContent.replace(/^\s*|\s*$/g, '''')); if (dataTags[fieldTitle].match("; ")) { manyAuthors = dataTags[fieldTitle].split("; "); } else { manyAuthors.push(dataTags[fieldTitle]); } for (var j = 0; j < manyAuthors.length; j++) { if (manyAuthors[j].match(", ")) { var authorName = manyAuthors[j].split(","); authorName[0] = authorName[0].replace(/^\s*|\s*$/g, ''''); newItem.creators.push(Zotero.Utilities.cleanAuthor((authorName[1] + (" ") + authorName[0]), "author")); } else { newItem.creators.push({lastName: dataTags["Provenance:"], creatorType: "creator"}); } } } else if (fieldTitle == "Partof:") { dataTags[fieldTitle] = ("Part of " + Zotero.Utilities.cleanTags(xPathContent.iterateNext().textContent.replace(/^\s*|\s*$/g, ''''))); } else if (fieldTitle == "OnlineFindingAid:") { dataTags[fieldTitle] = ("Online Finding Aid: " + xPathContent.iterateNext().textContent); Zotero.debug(dataTags["OnlineFindingAid:"]); } else if (fieldTitle == "Names:") { dataTags[fieldTitle] = (xPathContent.iterateNext().textContent.replace(/^\s*|\s*$/g, '''')); tagsContent = dataTags[fieldTitle].split(";"); } else { dataTags[fieldTitle] = Zotero.Utilities.cleanTags(xPathContent.iterateNext().textContent.replace(/^\s*|\s*$/g, '''')); } } for (var i = 0; i < tagsContent.length; i++) { tagsContent[i] = tagsContent[i].replace(/^\s*|\s*$/g, ''''); newItem.tags[i] = tagsContent[i]; } associateData (newItem, dataTags, "Title:", "title"); associateData (newItem, dataTags, "Dates:", "date"); associateData (newItem, dataTags, "Physicaldesc.:", "pages"); associateData (newItem, dataTags, "Repository:", "repository"); associateData (newItem, dataTags, "Scope/Content:", "abstractNote"); associateData (newItem, dataTags, "Partof:", "series"); associateData (newItem, dataTags, "OnlineFindingAid:", "extra"); newItem.notes.push({title:"Title", note:"To view this entry in your browser, please go to''http://aabc.bc.ca/WWW.aabc.archbc/access'' and search for the entry Title "}); newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var xPathTitles = doc.evaluate(''//tr[1]/td[2][@class="datatext"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var nextTitle; var xPathLinks = doc.evaluate(''//td[1][@class="dataleft"]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var nextLink; while (nextTitle = xPathTitles.iterateNext()) { items[xPathLinks.iterateNext().href] = nextTitle.textContent; } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('59cce211-9d77-4cdd-876d-6229ea20367f', '1.0.0b4.r5', '', '2008-12-12 12:35:00', '0', '100', '4', 'Biblioth├¿que et Archives nationales du Qu├⌐bec', 'Adam Crymble', 'http://catalogue.banq.qc.ca', 'function detectWeb(doc, url) { if (doc.title.match("Search")) { return "multiple"; } else if (doc.title.match("Recherche")) { return "multiple"; } else if (doc.evaluate(''//td[2]/a/img'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().src.match("book")) { return "book"; } else if (doc.evaluate(''//td[2]/a/img'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().src.match("mmusic")) { return "book"; } else if (doc.evaluate(''//td[2]/a/img'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().src.match("manalytic")) { return "book"; } else if (doc.evaluate(''//td[2]/a/img'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().src.match("msdisc")) { return "audioRecording"; } else if (doc.evaluate(''//td[2]/a/img'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().src.match("msound")) { return "audioRecording"; } else if (doc.evaluate(''//td[2]/a/img'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().src.match("mscas")) { return "audioRecording"; } else if (doc.evaluate(''//td[2]/a/img'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().src.match("mvdisc")) { return "videoRecording"; } else if (doc.evaluate(''//td[2]/a/img'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().src.match("mpaint")) { return "artwork"; } else if (doc.evaluate(''//td[2]/a/img'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().src.match("mserial")) { return "report"; } else if (doc.evaluate(''//td[2]/a/img'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().src.match("mcomponent")) { return "newspaperArticle"; } } ', '//Bibliotheque et Archives National du Quebec. Code by Adam Crymble function associateData (newItem, dataTags, field, zoteroField) { if (dataTags[field]) { newItem[zoteroField] = dataTags[field]; } } function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var dataTags = new Object(); var fieldTitle; var contents; var descriptionField; var tagsContent= new Array(); var inField = 0; //determines media type if (detectWeb(doc, url) == "book") { var newItem = new Zotero.Item("book"); descriptionField = "pages"; } else if (detectWeb(doc, url) == "audioRecording") { var newItem = new Zotero.Item("audioRecording"); descriptionField = "runningTime"; } else if (detectWeb(doc, url) == "videoRecording") { var newItem = new Zotero.Item("videoRecording"); descriptionField = "runningTime"; } else if (detectWeb(doc, url) == "artwork") { var newItem = new Zotero.Item("artwork"); descriptionField = "artworkSize"; } else if (detectWeb(doc, url) == "report") { var newItem = new Zotero.Item("report"); descriptionField = "pages"; } else if (detectWeb(doc, url) == "newspaperArticle") { var newItem = new Zotero.Item("newspaperArticle"); descriptionField = "pages" } //determines language var lang = doc.evaluate(''//td[2]/a/img'', doc, nsResolver, XPathResult.ANY_TYPE, null); var langCount = doc.evaluate(''count (//td[2]/a/img)'', doc, nsResolver, XPathResult.ANY_TYPE, null); var lang1 = lang.iterateNext().src; if (langCount.numberValue > 1) { lang1 = lang.iterateNext().src; if (lang1.match("lfre")) { newItem.language = "French"; } else if (lang1.match("leng")) { newItem.language = "English"; } } //scraping XPaths var xPathHeadings = doc.evaluate(''//td/table/tbody/tr/td[2]/b'', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathContents = doc.evaluate(''//td[2]/table/tbody/tr/td/table/tbody/tr/td[4]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathCount = doc.evaluate(''count (//td/table/tbody/tr/td[2]/b)'', doc, nsResolver, XPathResult.ANY_TYPE, null); if (doc.evaluate(''//td/table/tbody/tr/td[2]/b'', doc, nsResolver, XPathResult.ANY_TYPE, null)) { for (i=0; i<xPathCount.numberValue; i++) { fieldTitle = xPathHeadings.iterateNext().textContent.replace(/\s+/g, ''''); contents = xPathContents.iterateNext().textContent; if (contents.match("[*]") && fieldTitle!= "Publisher" && fieldTitle!= "├ëditeur") { var removeTagExcess = contents.indexOf("["); contents = contents.substr(0, removeTagExcess); } if (fieldTitle == "Author" | fieldTitle == "Auteur") { fieldTitle = "Author"; dataTags[fieldTitle] = (contents); var authorName = dataTags["Author"].split(","); authorName[0] = authorName[0].replace(/\s+/g, ''''); dataTags["Author"] = (authorName[1] + (" ") + authorName[0]); newItem.creators.push(Zotero.Utilities.cleanAuthor(dataTags["Author"], "author")); //publishing info } else if (fieldTitle == "Publisher" | fieldTitle == "├ëditeur") { fieldTitle = "Publisher"; dataTags["Publisher"] = (contents); if (dataTags["Publisher"].match(":")) { var place1 = dataTags["Publisher"].split(":"); dataTags["Place"] = place1[0].replace(/^\s*|\[|\]/g,''''); var publish = place1[1].split(","); dataTags["Publish"] = (publish[0].replace(/^\s*|\[|\]/g,'''')); place1[1] = place1[1].replace(/^\s*|\s*$|\[|\]/g, ''''); if (place1[1].match("/?")) { var dateLength = place1[1].length-5; } else { var dateLength = place1[1].length-4; } dataTags["Date"] = place1[1].substr(dateLength); } else { dataTags["Date"] = (contents); } //tags } else if (fieldTitle == "Subjects" | fieldTitle == "Sujets") { fieldTitle = "Subjects"; tagsContent = contents.split("\n"); //source } else if (fieldTitle == "Source") { dataTags[fieldTitle] = (contents.replace(/^\s*|\s*$/g, '''')); dataTags["Source"] = ("Source: " + dataTags["Source"]); Zotero.debug(doc.title); //normal } else { dataTags[fieldTitle] = (contents.replace(/^\s*|\s*$/g, '''')); } } //series if (fieldTitle == "Series" | fieldTitle == "Collection") { fieldTitle = "Series"; dataTags[fieldTitle] = (contents.replace(/\s\s\s*/g, '''')); } //makes tags for (i = 0; i < tagsContent.length; i++) { if (tagsContent[i] != ("") && tagsContent[i] !=(" ")) { newItem.tags[i] = tagsContent[i]; } } associateData (newItem, dataTags, "Description", descriptionField); associateData (newItem, dataTags, "Title", "title"); associateData (newItem, dataTags, "Place", "place"); associateData (newItem, dataTags, "Publish", "publisher"); associateData (newItem, dataTags, "Date", "date"); associateData (newItem, dataTags, "Source", "extra"); associateData (newItem, dataTags, "ISBN", "ISBN"); associateData (newItem, dataTags, "Localinf.", "rights"); associateData (newItem, dataTags, "Series", "series"); associateData (newItem, dataTags, "Notes", "abstractNote"); associateData (newItem, dataTags, "Numbering", "reportNumber"); associateData (newItem, dataTags, "Titre", "title"); associateData (newItem, dataTags, "Num├⌐rotation", "reportNumber"); } newItem.url = doc.location.href; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var next_title = new Array(); var links1 = new Array(); var y = 0; var next_title1 = new Array(); var titlesCount = doc.evaluate(''count (//p/table/tbody/tr/td/b)'', doc, nsResolver, XPathResult.ANY_TYPE, null); var numAndTitle= doc.evaluate(''//p/table/tbody/tr/td/b'', doc, nsResolver, XPathResult.ANY_TYPE, null); var links = doc.evaluate(''//p/table/tbody/tr/td/a[img]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var multipleTest = 0; for (j=0; j < titlesCount.numberValue; j++) { next_title[j] = numAndTitle.iterateNext().textContent; next_title[j] = next_title[j].substr(0, next_title[j].length-1); if (/^\d*$/.test(next_title[j])) { multipleTest = 0; } else if (multipleTest < 1) { multipleTest++; next_title1[y] = next_title[j]; y++; Zotero.debug(next_title1[0]); } else if (multipleTest > 1) { multipleTest = 0; } } for (j = 0; j < 10; j++) { links1[j] = links.iterateNext().href; //Zotero.debug(links1[0]); items[links1] = next_title1[j]; } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('2d174277-7651-458f-86dd-20e168d2f1f3', '1.0.0b4.r5', '', '2008-06-12 19:30:00', '0', '100', '4', 'Canadiana.org', 'Adam Crymble', 'http://(www.)?canadiana.org', 'function detectWeb(doc, url) { //checks the title of the webpage. If it matches, then the little blue book symbol appears in the address bar. //works for English and French versions of the page. if(doc.title == "Early Canadiana Online - Item Record"|doc.title == "Notre m├⌐moire en ligne - Notice") { return "book"; } else if (doc.evaluate(''//div[@id="Content"]/div[@class="NormalRecord"]/h3/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } } ', '//Canadiana Translator Coding by Adam Crymble //because the site uses so many random formats for the "Imprint" field, it''s not always perfect. But it works for MOST entries function associateData (newItem, dataTags, field, zoteroField) { if (dataTags[field]) { newItem[zoteroField] = dataTags[field]; } } function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == "x" ) return namespace; else return null; } : null; //declaring variables to be used later. var newItem = new Zotero.Item("book"); newItem.url = doc.location.href; var dataTags = new Object(); var fieldTitle; var tagsContent= new Array(); //these variables tell the program where to find the data we want in the HTML file we''re looking at. //in this case, the data is found in a table. var xPath1 = ''//tr/td[1][@class="Label"]''; var xPath2 = ''//tr/td[2]''; //at this point, all the data we want has been saved into the following 2 Objects: one for the headings, one for the content. // The 3rd object tells us how many items we''ve found. if (doc.evaluate(''//tr/td[1][@class="Label"]'', doc, nsResolver, XPathResult.ANY_TYPE, null)) { var xPath1Results = doc.evaluate(xPath1, doc, nsResolver, XPathResult.ANY_TYPE, null); var xPath2Results = doc.evaluate(xPath2, doc, nsResolver, XPathResult.ANY_TYPE, null); var xPathCount = doc.evaluate( ''count (//tr/td[1][@class="Label"])'', doc, nsResolver, XPathResult.ANY_TYPE, null); } //At this point we have two lists (xPath1Results and xPath2Results). this loop matches the first item in the first list //with the first item in the second list, and on until the end. //If we then ask for the "Principal Author" the program returns "J.K. Rowling" instead of "Principal Author" if (doc.evaluate(''//tr/td[1][@class="Label"]'', doc, nsResolver, XPathResult.ANY_TYPE, null)) { for (i=0; i<xPathCount.numberValue; i++) { fieldTitle=xPath1Results.iterateNext().textContent.replace(/\s+/g, ''''); //gets the author''s name without cleaning it away using cleanTags. if (fieldTitle =="PrincipalAuthor:" || fieldTitle == "Auteurprincipal:") { fieldTitle="PrincipalAuthor:"; dataTags[fieldTitle]=(xPath2Results.iterateNext().textContent); var authorName =dataTags["PrincipalAuthor:"].split(","); authorName[0]=authorName[0].replace(/\s+/g, ''''); dataTags["PrincipalAuthor:"]= (authorName[1] + (" ") + authorName[0]); newItem.creators.push(Zotero.Utilities.cleanAuthor(dataTags["PrincipalAuthor:"], "author")); //Splits Adressebibliographique or Imprint into 3 fields and cleans away any extra whitespace or unwanted characters. } else if (fieldTitle =="Adressebibliographique:" || fieldTitle == "Imprint:") { fieldTitle = "Imprint:"; dataTags[fieldTitle] = Zotero.Utilities.cleanTags(xPath2Results.iterateNext().textContent); var separateImprint = dataTags["Imprint:"].split(":"); separateImprint[0]= separateImprint[0].replace(/^\s*|\[|\]/g,''''); dataTags["Place:"]=separateImprint[0]; var justDate = separateImprint[1].replace(/\D/g, ''''); dataTags["Date:"]= justDate; separateImprint[1] = separateImprint[1].replace(/\d|\[|\]|\./g, ''''); separateImprint[1] = separateImprint[1].replace(/^\s*|\s*$/g, ''''); dataTags["Publisher:"]= separateImprint[1]; // determines how many tags there will be, pushes them into an array and clears away whitespace. } else if (fieldTitle == "Subject:" || fieldTitle == "Sujet:") { tagsContent.push(Zotero.Utilities.cleanTags(xPath2Results.iterateNext().textContent.replace(/^\s*|\s*$/g, ''''))); while (fieldTitle != "Collection:") { i=i+1; tagsContent.push(Zotero.Utilities.cleanTags(xPath2Results.iterateNext().textContent.replace(/^\s*|\s*$/g, ''''))); fieldTitle=xPath1Results.iterateNext().textContent.replace(/\s+/g, ''''); } } else { dataTags[fieldTitle] = Zotero.Utilities.cleanTags(xPath2Results.iterateNext().textContent.replace(/^\s*|\s*$/g, '''')); } } } //Adds a string to CIHM no: and ICMH no: so that the resulting number makes sense to the reader. if (dataTags["CIHMno.:"]) { dataTags["CIHMno.:"]=("CIHM Number: " + dataTags["CIHMno.:"]); } if (dataTags["ICMHno:"]) { dataTags["ICMHno:"]=("ICMH nombre: " + dataTags["ICMHno:"]); } //makes tags of the items in the "tagsContent" array. for (var i = 0; i < tagsContent.length; i++) { newItem.tags[i] = tagsContent[i]; } //calls the associateData function to put the data in the correct Zotero field. associateData (newItem, dataTags, "Title:", "title"); associateData (newItem, dataTags, "Place:", "place"); associateData (newItem, dataTags, "Publisher:", "publisher"); associateData (newItem, dataTags, "Date:", "date"); associateData (newItem, dataTags, "PageCount:", "pages"); associateData (newItem, dataTags, "CIHMno.:", "extra"); associateData (newItem, dataTags, "DocumentSource:", "rights"); associateData (newItem, dataTags, "Titre:", "title" ); associateData (newItem, dataTags, "Nombredepages:", "pages"); associateData (newItem, dataTags, "ICMHno:", "extra"); associateData (newItem, dataTags, "Documentoriginal:", "rights"); //Saves everything to Zotero. newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var titles = doc.evaluate(''//div[@id="Content"]/div[@class="NormalRecord"]/h3/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_title; while (next_title = titles.iterateNext()) { items[next_title.href] = next_title.textContent; } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('1f245496-4c1b-406a-8641-d286b3888231', '1.0.0b4.r5', '', '2008-06-06 08:45:00', '0', '100', '4', 'The Boston Globe', 'Adam Crymble', 'http://(www|search).boston.com/', 'function detectWeb(doc, url) { if (url.match("search.boston.com")) { return "multiple"; } else if (doc.evaluate(''//div[@id="headTools"]/h1'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "newspaperArticle"; } else if (doc.evaluate(''//div[@id="blogEntry"]/h1/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "blogPost"; } }', '//Boston Globe and Boston.com Translator. Code by Adam Crymble function scrape (doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { }: null; //sets variables that remain constant in both formats if (doc.evaluate(''//span[@id="dateline"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { var xPathDateResults = doc.evaluate (''//span[@id="dateline"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); } if (doc.evaluate(''//span[@id="byline"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { var xPathAuthorResults= doc.evaluate (''//span[@id="byline"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); } //sets variables unique to the blog posts on Boston.com if (doc.evaluate(''//div[@id="blogEntry"]/h1/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { var newItem =new Zotero.Item("blogPost"); newItem.publicationTitle = "Boston.com"; //title var xPathTitle = ''//div[@id="blogEntry"]/h1/a''; //date var articleDate = xPathDateResults.iterateNext().textContent; newItem.date = articleDate; //author var articleAuthor = xPathAuthorResults.iterateNext().textContent.replace(/Posted by /i, ''''); articleAuthor = articleAuthor.split('',''); var authorName = articleAuthor[0].split("and "); //else it sets the variables unique to the articles on the Boston Globe } else if (doc.evaluate(''//div[@id="headTools"]/h1'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { var newItem = new Zotero.Item("newspaperArticle"); newItem.publicationTitle = "The Boston Globe"; //title var xPathTitle = ''//div[@id="headTools"]/h1''; //date if (doc.evaluate(''//span[@id="dateline"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { var articleDate = xPathDateResults.iterateNext().textContent; if (articleDate.match(''/'')) { articleDate = articleDate.split(''/''); newItem.date = articleDate[1]; } else { newItem.date = articleDate; } } //author(s) var articleAuthor = xPathAuthorResults.iterateNext().textContent.replace(/^\s*|\s*$/g, ''''); articleAuthor= articleAuthor.substr(3); var authorName = articleAuthor.split("and "); //byline if (doc.evaluate(''//div[@id="headTools"]/h2'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { newItem.abstractNote = doc.evaluate (''//div[@id="headTools"]/h2'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; } } //creates title using xPaths defined above var xPathTitleResults = doc.evaluate (xPathTitle, doc, nsResolver, XPathResult.ANY_TYPE, null); newItem.title = xPathTitleResults.iterateNext().textContent; //pushes author(s) for (var i=0; i<authorName.length; i++) { newItem.creators.push(Zotero.Utilities.cleanAuthor(authorName[i], "author")); } newItem.url = doc.location.href; newItem.complete(); } function doWeb (doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { }: null; var uris= new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var result = doc.evaluate(''//div[@class="regTZ"]/a[@class="titleLink"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var elmt = result.iterateNext(); Zotero.debug(elmt); while (elmt) { //items.push(elmt.href); items[elmt.href] = elmt.textContent; elmt = result.iterateNext(); } items = Zotero.selectItems(items); if (!items) { return true; } for (var i in items) { uris.push(i); } } else uris.push(url); Zotero.debug(uris); Zotero.Utilities.processDocuments(uris, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('91acf493-0de7-4473-8b62-89fd141e6c74', '1.0.0b3.r1', '', '2008-06-12 19:00:00', '1', '100', '1', 'MAB2', 'Simon Kornblith. Adaptions for MAB2: Leon Krauthausen (FUB)', 'mab2', 'function detectImport() { var mab2RecordRegexp = /^[0-9]{3}[a-z ]{2}[a-z ]{3}$/ var read = Zotero.read(8); if(mab2RecordRegexp.test(read)) { return true; } }', 'var fieldTerminator = "\x1E"; var recordTerminator = "\x1D"; var subfieldDelimiter = "\x1F"; /* * CLEANING FUNCTIONS */ // general purpose cleaning function clean(value) { value = value.replace(/^[\s\.\,\/\:;]+/, ''''); value = value.replace(/[\s\.\,\/\:;]+$/, ''''); value = value.replace(/<<+/g, ''''); value = value.replace(/>>+/g, ''''); value = value.replace(/ +/g, '' ''); var char1 = value[0]; var char2 = value[value.length-1]; if((char1 == "[" && char2 == "]") || (char1 == "(" && char2 == ")")) { // chop of extraneous characters return value.substr(1, value.length-2); } return value; } function cleanTag(value) { // Chop off Authority-IDs value = value.slice(0, value.indexOf(''|'')); return value; } // number extraction function pullNumber(text) { var pullRe = /[0-9]+/; var m = pullRe.exec(text); if(m) { return m[0]; } } // ISBN extraction function pullISBN(text) { var pullRe = /[0-9X\-]+/; var m = pullRe.exec(text); if(m) { return m[0]; } } // corporate author extraction function corpAuthor(author) { return {lastName:author, fieldMode:true}; } // regular author extraction function author(author, type, useComma) { return Zotero.Utilities.cleanAuthor(author, type, useComma); } // MAB2 author extraction // evaluates subfield $b and sets authType function authorMab(author, authType, useComma) { if(!authType) var authType=''author''; authType = authType.replace(''[Hrsg.]'', ''editor''); authType = authType.replace(''[Mitarb.]'', ''contributor''); authType = authType.replace(''[├£bers.]'', ''translator''); return Zotero.Utilities.cleanAuthor(author, authType, useComma); } /* * END CLEANING FUNCTIONS */ var record = function() { this.directory = new Object(); this.leader = ""; this.content = ""; // defaults this.indicatorLength = 2; this.subfieldCodeLength = 2; } // import a binary MAB2 record into this record record.prototype.importBinary = function(record) { // get directory and leader var directory = record.substr(0, record.indexOf(fieldTerminator)); this.leader = directory.substr(0, 24); var directory = directory.substr(24); // get various data this.indicatorLength = parseInt(this.leader[10], 10); this.subfieldCodeLength = parseInt(this.leader[11], 10); var baseAddress = parseInt(this.leader.substr(12, 5), 10); // get record data var contentTmp = record.substr(baseAddress); // MARC wants one-byte characters, so when we have multi-byte UTF-8 // sequences, add null characters so that the directory shows up right. we // can strip the nulls later. this.content = ""; for(i=0; i<contentTmp.length; i++) { this.content += contentTmp[i]; if(contentTmp.charCodeAt(i) > 0x00FFFF) { this.content += "\x00\x00\x00"; } else if(contentTmp.charCodeAt(i) > 0x0007FF) { this.content += "\x00\x00"; } else if(contentTmp.charCodeAt(i) > 0x00007F) { this.content += "\x00"; } } // read directory for(var i=0; i<directory.length; i+=12) { var tag = parseInt(directory.substr(i, 3), 10); var fieldLength = parseInt(directory.substr(i+3, 4), 10); var fieldPosition = parseInt(directory.substr(i+7, 5), 10); if(!this.directory[tag]) { this.directory[tag] = new Array(); } this.directory[tag].push([fieldPosition, fieldLength]); } } // add a field to this record record.prototype.addField = function(field, indicator, value) { field = parseInt(field, 10); // make sure indicator is the right length if(indicator.length > this.indicatorLength) { indicator = indicator.substr(0, this.indicatorLength); } else if(indicator.length != this.indicatorLength) { indicator = Zotero.Utilities.lpad(indicator, " ", this.indicatorLength); } // add terminator value = indicator+value+fieldTerminator; // add field to directory if(!this.directory[field]) { this.directory[field] = new Array(); } this.directory[field].push([this.content.length, value.length]); // add field to record this.content += value; } // get all fields with a certain field number record.prototype.getField = function(field) { field = parseInt(field, 10); var fields = new Array(); // make sure fields exist if(!this.directory[field]) { return fields; } // get fields for(var i in this.directory[field]) { var location = this.directory[field][i]; // add to array, replacing null characters fields.push([this.content.substr(location[0], this.indicatorLength), this.content.substr(location[0]+this.indicatorLength, location[1]-this.indicatorLength-1).replace(/\x00/g, "")]); } return fields; } // get subfields from a field record.prototype.getFieldSubfields = function(tag) { // returns a two-dimensional array of values var fields = this.getField(tag); var returnFields = new Array(); for(var i in fields) { returnFields[i] = new Object(); var subfields = fields[i][1].split(subfieldDelimiter); if (subfields.length == 1) { returnFields[i]["?"] = fields[i][1]; } else { for(var j in subfields) { if(subfields[j]) { var subfieldIndex = subfields[j].substr(0, this.subfieldCodeLength-1); if(!returnFields[i][subfieldIndex]) { returnFields[i][subfieldIndex] = subfields[j].substr(this.subfieldCodeLength-1); } } } } } return returnFields; } // add field to DB record.prototype._associateDBField = function(item, fieldNo, part, fieldName, execMe, arg1, arg2) { var field = this.getFieldSubfields(fieldNo); Zotero.debug(''MARC: found ''+field.length+'' matches for ''+fieldNo+part); if(field) { for(var i in field) { var value = false; for(var j=0; j<part.length; j++) { var myPart = part[j]; if(field[i][myPart]) { if(value) { value += " "+field[i][myPart]; } else { value = field[i][myPart]; } } } if(value) { value = clean(value); if(execMe) { value = execMe(value, arg1, arg2); } if(fieldName == "creator") { item.creators.push(value); } else { item[fieldName] = value; return; } } } } } // add field to DB as tags record.prototype._associateTags = function(item, fieldNo, part) { var field = this.getFieldSubfields(fieldNo); for(var i in field) { for(var j=0; j<part.length; j++) { var myPart = part[j]; if(field[i][myPart]) { item.tags.push(cleanTag(field[i][myPart])); } } } } // this function loads a MAB2 record into our database record.prototype.translate = function(item) { // get item type if(this.leader) { var marcType = this.leader[6]; if(marcType == "g") { item.itemType = "film"; } else if(marcType == "k" || marcType == "e" || marcType == "f") { item.itemType = "artwork"; } else if(marcType == "t") { item.itemType = "manuscript"; } else { item.itemType = "book"; } } else { item.itemType = "book"; } // Extract MAB2 fields // FUB Added language, edition, pages, url, edition, series, ISBN, url for (var i = 100; i <= 196; i++) { if (this.getFieldSubfields(i)[0]) { var field = this.getFieldSubfields(i)[0][''a'']; var authType = this.getFieldSubfields(i)[0][''b'']; this._associateDBField(item, i, "a", "creator", authorMab, authType, true); } } // if (this.getFieldSubfields("800")[0]) this._associateDBField(item, "800", "a", "creator", author, "author", true); if (!item.language) this._associateDBField(item, "037b", "a", "language"); this._associateDBField(item, "200", "a", "creator", corpAuthor); if (!item.title) this._associateDBField(item, "331", "a", "title"); this._associateDBField(item, "304", "a", "extra"); if (this.getFieldSubfields("335")[0]) { item.title = item.title + ": " + this.getFieldSubfields("335")[0][''a'']; } if (!item.edition) this._associateDBField(item, "403", "a", "edition"); if (!item.place) this._associateDBField(item, "410", "a", "place"); if (!item.publisher) this._associateDBField(item, "412", "a", "publisher"); if (!item.title) this._associateDBField(item, "1300", "a", "title"); if (!item.date) this._associateDBField(item, "425", "a", "date", pullNumber); if (!item.pages) this._associateDBField(item, "433", "a", "pages", pullNumber); if (!item.series) this._associateDBField(item, "451", "a", "series"); this._associateDBField(item, "501", "a", "extra"); this._associateDBField(item, "519", "a", "extra"); if (!item.edition) this._associateDBField(item, "523", "a", "edition"); if (!item.ISBN) this._associateDBField(item, "540", "a", "ISBN", pullISBN); if (!item.date) this._associateDBField(item, "595", "a", "date", pullNumber); if (!item.url) this._associateDBField(item, "655e", "u", "url"); // Extract German subject headings (RSWK) as tags this._associateTags(item, "902", "acfgpkstz"); this._associateTags(item, "907", "acfgpkstz"); this._associateTags(item, "912", "acfgpkstz"); this._associateTags(item, "917", "acfgpkstz"); this._associateTags(item, "922", "acfgpkstz"); this._associateTags(item, "927", "acfgpkstz"); this._associateTags(item, "932", "acfgpkstz"); this._associateTags(item, "937", "acfgpkstz"); this._associateTags(item, "942", "acfgpkstz"); } function doImport() { var text; var holdOver = ""; // part of the text held over from the last loop Zotero.setCharacterSet("utf-8"); while(text = Zotero.read(4096)) { // read in 4096 byte increments var records = text.split("\x1D"); if(records.length > 1) { records[0] = holdOver + records[0]; holdOver = records.pop(); // skip last record, since it''s not done for(var i in records) { var newItem = new Zotero.Item(); // create new record var rec = new record(); rec.importBinary(records[i]); rec.translate(newItem); newItem.complete(); } } else { holdOver += text; } } }'); REPLACE INTO translators VALUES ('83979786-44af-494a-9ddb-46654e0486ef', '1.0.0b4.r5', '', '2008-07-07 14:50:00', '0', '100', '4', 'Reuters', 'Michael Berkowitz', 'http://(www\.)?reuters.com/', 'function detectWeb(doc, url) { if (url.match(/article/)) { return "newspaperArticle"; } }', 'function doWeb(doc, url) { var item = new Zotero.Item("newspaperArticle"); item.title = Zotero.Utilities.trimInternal(doc.evaluate(''//div[@class="article primaryContent"]/h1'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); item.date = doc.evaluate(''//div[@class="timestampHeader"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent.match(/^.*\d{4}/)[0]; var byline = doc.evaluate(''//div[@id="resizeableText"]/p[1]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent; if (byline.match(/^By/)) { var authors = byline.substr(3).split('',''); for each (var aut in authors) { item.creators.push(Zotero.Utilities.cleanAuthor(aut, "author")); } item.abstractNote = doc.evaluate(''//div[@id="resizeableText"]/p[2]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent.match(/\-\s+(.*)$/)[1]; } else { item.abstractNote = byline.match(/\-\s+(.*)$/)[1]; } item.url = url; item.complete(); }'); REPLACE INTO translators VALUES ('d93c14fb-d327-4540-b60a-327309ea512b', '1.0.0b4.r5', '', '2008-06-20 20:45:00', '0', '100', '4', 'Journal of Electronic Publishing', 'Michael Berkowitz', 'http://quod.lib.umich.edu/.*c=jep', 'function detectWeb(doc, url) { if (doc.evaluate(''//div/span[text() = "Search Results"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else if (url.match(/\d+\.\d+\.\d+/)) { return "journalArticle"; } }', 'function doWeb(doc, url) { var n = doc.documentElement.namespaceURI; var ns = n ? function(prefix) { if (prefix == ''x'') return n; else return null; } : null; var arts = new Array(); if (detectWeb(doc, url) == "multiple") { var links = doc.evaluate(''//div[@id="resultslist"]/div[@class="itemcitation"]/div/a'', doc, ns, XPathResult.ANY_TYPE, null); var link; var items = new Object(); while (link = links.iterateNext()) { items[link.href] = Zotero.Utilities.trimInternal(link.textContent); } items = Zotero.selectItems(items); for (var i in items) { arts.push(i); } } else { arts = [url]; } Zotero.Utilities.processDocuments(arts, function(doc) { var data = new Object(); var rows = doc.evaluate(''//table[@id="itemmdataTable"]//tr'', doc, ns, XPathResult.ANY_TYPE, null); var row; while (row = rows.iterateNext()) { var header = doc.evaluate(''./td[1]'', row, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent; var value = doc.evaluate(''./td[2]'', row, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent; data[Zotero.Utilities.trimInternal(header.replace(":", "").replace("Authors", "Author"))] = value; } var item = new Zotero.Item("journalArticle"); item.publicationTitle = "Journal of Electronic Publishing"; item.title = data["Title"]; var authors = data["Author"].split(","); for each (var aut in authors) { item.creators.push(Zotero.Utilities.cleanAuthor(aut, "author")); } item.url = data["URL"]; var voliss = data["Source"].match(/vol\.\s+([^,]+),\s+no\.\s+([^,]+),\s+(.*)$/); item.volume = voliss[1]; item.issue = voliss[2]; item.date = voliss[3]; item.complete(); }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('58a778cc-25e2-4884-95b3-6b22d7571183', '1.0.0b4.r5', '', '2008-06-17 19:30:00', '1', '100', '4', 'Gmail', 'Michael Berkowitz', 'http://mail.google.com/', 'function detectWeb(doc, url) { if (url.match(/#inbox\/[\w\d]+/)) { return "document"; } }', 'function doWeb(doc, url) { var n = doc.documentElement.namespaceURI; var ns = n ? function(prefix) { if (prefix == ''x'') return n; else return null; } : null; var scripts = doc.evaluate(''//script'', doc, ns, XPathResult.ANY_TYPE, null); var script; var text = ""; while (script = scripts.iterateNext()) { text += script.textContent; } var ik = text.match(/ID_KEY:\"([^"]+)\"/)[1] var th = url.match(/#inbox\/(.*)$/)[1]; var newurl = ''http://mail.google.com/mail/?ui=2&ik='' + ik + ''&view=om&th='' + th; Zotero.Utilities.HTTP.doGet(newurl, function(text) { var item = new Zotero.Item("email"); var to = text.match(/\nTo:\s+([^\n]+)\n/)[1]; item.creators.push(Zotero.Utilities.cleanAuthor(Zotero.Utilities.trimInternal(to.replace(/<.*>/g, "")), "recipient")); var from = text.match(/\nFrom:\s+([^\n]+)\n/)[1]; item.creators.push(Zotero.Utilities.cleanAuthor(Zotero.Utilities.trimInternal(from.replace(/<.*>/g, "")), "author")); item.date = text.match(/\nDate:\s+(.*,\s+\d+\s+\w+\s+\d{4})/)[1]; item.subject = text.match(/\nSubject:\s+([^\n]+)/)[1]; if (item.subject == "") item.subject = "<No Subject>"; item.title = item.subject; item.complete(); }); Zotero.wait(); }'); REPLACE INTO translators VALUES ('490909d7-7d79-4c7a-a136-77df618d4db2', '1.0.0b4.r5', '', '2008-06-20 20:45:00', '1', '100', '4', 'Worldcat.org', 'Michael Berkowitz', 'http://(www.)?worldcat.org/', 'function detectWeb(doc, url) { if (url.match(/search?/) && doc.evaluate(''//input[@id="itemid"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else { var type = doc.evaluate(''//tbody/tr/td[2][img]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent.toLowerCase().match(/(\w+);/)[1]; switch (type) { case "book": return "book"; case "article": return "journalArticle"; case "recording": case "disc": return "audioRecording"; case "tape": return "videoRecording"; } } }', 'function ENify(str) { return str.match(/^[^&]+/)[0] + ''?page=endnote&client=worldcat.org-detailed_record''; } function doWeb(doc, url) { var n = doc.documentElement.namespaceURI; var ns = n ? function(prefix) { if (prefix == ''x'') return n; else return null; } : null; var books = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var titles = doc.evaluate(''//div[@class="name"]/a'', doc, ns, XPathResult.ANY_TYPE, null); var title; while (title = titles.iterateNext()) { items[title.href] = Zotero.Utilities.trimInternal(title.textContent); } items = Zotero.selectItems(items); for (var i in items) { books.push(ENify(i)); } } else { var link = doc.evaluate(''//a[contains(text(), "EndNote")]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().href; books = [link]; } for each (var book in books) { Zotero.Utilities.HTTP.doGet(book, function(text) { text = text.replace("MUSIC", "PAMP"); var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.translate(); }); Zotero.wait(); } }'); REPLACE INTO translators VALUES ('2943d7fc-3ce8-401c-afd5-ee1f70b7aae0', '1.0.0b4.r5', '', '2008-06-12 19:00:00', '0', '100', '4', 'Helsinki University of Technology', 'Michael Berkowitz', 'https?://teemu.linneanet.fi/', 'function detectWeb(doc, url) { if (url.match(/v\d+=\d+/)) { return "book"; } else if (url.match(/Search_Arg/)) { return "multiple"; } }', 'function MARCify(str) { return str.replace(/v\d+=([^&]+)/, "v3=$1"); } function doWeb(doc, url) { var n = doc.documentElement.namespaceURI; var ns = n ? function(prefix) { if (prefix == ''x'') return n; else return null; } : null; var books = new Array(); if (detectWeb(doc, url) == "multiple") { var titles = doc.evaluate(''/html/body/form/table/tbody/tr/td[3]/a'', doc, ns, XPathResult.ANY_TYPE, null); var title; var items = new Object(); while (title = titles.iterateNext()) { items[title.href] = Zotero.Utilities.trimInternal(title.textContent); } items = Zotero.selectItems(items); for (var i in items) { books.push(MARCify(i)); } } else { books = [MARCify(url)]; } var translator = Zotero.loadTranslator("import"); translator.setTranslator("a6ee60df-1ddc-4aae-bb25-45e0537be973"); var marc = translator.getTranslatorObject(); Zotero.Utilities.processDocuments(books, function(doc) { var elmts = doc.evaluate(''/html/body/form/table/tbody/tr[th]'', doc, ns, XPathResult.ANY_TYPE, null); var record = new marc.record(); var elmt; while (elmt = elmts.iterateNext()) { var field = Zotero.Utilities.superCleanString(doc.evaluate(''./th'', elmt, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent); if (field) { var value = doc.evaluate(''./td[1]'', elmt, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent; if (value.split(/\n/)[1]) value = Zotero.Utilities.trimInternal(value.split(/\n/)[1]); if(field == "LDR") { record.leader = value; } else if(field != "FMT") { value = value.replace(/\|([a-z]) /g, marc.subfieldDelimiter+"$1"); var code = field.substring(0, 3); var ind = ""; if(field.length > 3) { ind = field[3]; if(field.length > 4) { ind += field[4]; } } record.addField(code, ind, value); } } } var item = new Zotero.Item("book"); record.translate(item); item.complete(); }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('b662c6eb-e478-46bd- bad4-23cdfd0c9d67', '1.0.0b4.r5', '', '2008-06-12 19:30:00', '0', '100', '4', 'JurPC', 'Oliver Vivell and Michael Berkowitz', 'http://www.jurpc.de/', 'function detectWeb(doc, url) { var doctype = doc.evaluate(''//meta/@doctype'', doc, null,XPathResult.ANY_TYPE, null).iterateNext().textContent; if (doctype == "Aufsatz"){ return "Aufsatz"; }else{ return "Rechtsprechung"; } }', 'function doWeb(doc, url) { var articles = new Array(); if (detectWeb(doc, url) == "Aufsatz") { // Aufsatz gefunden Zotero.debug("Ok, we have an JurPC Article"); var authors = ''//meta/@Author''; var title = ''//meta/@Title''; var webdoktext = ''//meta/@WebDok''; var authors = parseDoc(authors,doc); var title = parseDoc(title,doc); var webabs = webdoktext.substr(webdoktext.lastIndexOf("Abs."), webdoktext.length); //Zotero.debug(doctype); Zotero.debug(webdoktext); var year = url.substr(28, 4); //Get Year & WebDok Number from Url var webdok = url.substr(32, 4); var suche = webdok.indexOf("0"); if (suche == 0){ webdok = url.substr(33, 3); suche = webdok.indexOf("0"); if(suche == 0){ webdok = url.substr(34, 2); suche = webdok.indexOf("0"); } //Zotero.debug(suche); if(suche == 0){ webdok = url.substr(35, 1); suche = webdok.indexOf("0"); } } var re = /<[^>]*>/ Zotero.debug(re); title = title.replace(re,""); title = title.replace(re,""); title = title.replace(re,""); Zotero.debug(title); var newArticle = new Zotero.Item(''journalArticle''); newArticle.title = title; newArticle.journal = "JurPC"; newArticle.journalAbbreviation = "JurPC"; newArticle.year = year; newArticle.volume = "WebDok " + webdok + "/" + year; newArticle.pages = webabs ; newArticle.url = url; var aus = authors.split("/"); for (var i=0; i< aus.length ; i++) { Zotero.debug(aus[0]); newArticle.creators.push(Zotero.Utilities.cleanAuthor(aus[i], "author")); } newArticle.complete(); } else { // Dokument ist ein Urteil var gericht = ''//meta/@Gericht''; var ereignis = ''//meta/@Ereignis''; var datum = ''//meta/@Datum''; var aktz = ''//meta/@aktz''; var titel = ''//meta/@Title''; var webdok = ''//meta/@WebDok''; try{ var gericht = parseDoc(gericht,doc); var ereignis = parseDoc(ereignis,doc); var datum = parseDoc(datum,doc); var aktz = parseDoc(aktz,doc); var webdok = parseDoc(webdok,doc); var titel = parseDoc(titel,doc); } catch (e) { var titel = doc.evaluate(''//meta/@Titel'', doc, null,XPathResult.ANY_TYPE, null).iterateNext().textContent;} //Zotero.debug(titel); // Informationen an Zotero ├╝bergeben var newCase = new Zotero.Item(''case''); newCase.court = gericht; newCase.caseName = titel; newCase.title = titel; newCase.shortTitle = "WebDok " + webdok; newCase.dateDecided = ereignis + " , " + aktz; newCase.url = url; newCase.journalAbbreviation = "JurPC"; //Zotero.debug(newCase.codeNumber); newCase.complete(); } } function parseDoc(xpath, doc) { var content = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE,null).iterateNext().textContent; return content; }'); REPLACE INTO translators VALUES ('cae7d3ec-bc8d-465b-974f-8b0dcfe24290', '1.0.0b4.r5', '', '2008-06-12 19:30:00', '0', '100', '4', 'BIUM', 'Michael Berkowitz', 'http://hip.bium.univ-paris5.fr/', 'function detectWeb(doc, url) { if (doc.evaluate(''//td/a[@class="itemTitle"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else if (doc.evaluate(''//td[1]/span[@class="uportal-channel-strong"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "book"; } }', 'function makeMARCurl(link, rsId, rrsId, query) { return ''http://hip.bium.univ-paris5.fr/uPortal/Print?link='' + link + ''&xslFileName=com/dynix/hip/uportal/channels/standard/FullMarc.xsl&F=/searching/getmarcdata&responseSessionId='' + rsId + ''&responseResultSetId='' + rrsId + ''&searchGroup=BIUM-13&query='' + query + ''&searchTargets=16&locale=fr_FR''; } function doWeb(doc, url) { var n = doc.documentElement.namespaceURI; var ns = n ? function(prefix) { if (prefix == ''x'') return n; else return null; } : null; var books = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var links = doc.evaluate(''//a[@class="itemTitle"]'', doc, ns, XPathResult.ANY_TYPE, null); var link; while (link = links.iterateNext()) { items[link.href] = Zotero.Utilities.trimInternal(link.textContent); } items = Zotero.selectItems(items); var rsId = doc.evaluate(''//input[@name="responseSessionId"]'', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().value; var rrsId = doc.evaluate(''//input[@name="responseResultSetId"]'', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().value; var query = doc.evaluate(''//input[@name="query"]'', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().value; var linkRE = new RegExp("''([^'']+)''", "g"); for (var i in items) { var link = linkRE.exec(i)[1]; Zotero.debug(link); books.push(makeMARCurl(link, rsId, rrsId, query)); } } else { var link = url.match(/link=([^&]+)/)[1]; var rsId = url.match(/responseSessionId=([^&]+)/)[1]; var rrsId = url.match(/responseResultSetId=([^&]+)/)[1]; var query = url.match(/query=([^&]+)/)[1]; books = [makeMARCurl(link, rsId, rrsId, query)]; } var translator = Zotero.loadTranslator("import"); translator.setTranslator("a6ee60df-1ddc-4aae-bb25-45e0537be973"); var marc = translator.getTranslatorObject(); Zotero.Utilities.processDocuments(books, function(doc) { var rows = doc.evaluate(''//center/table/tbody/tr'', doc, ns, XPathResult.ANY_TYPE, null); var row; var record = new marc.record(); while (row = rows.iterateNext()) { var field = Zotero.Utilities.trimInternal(doc.evaluate(''./td[1]'', row, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent.replace(":", "")); if (field) { var value = doc.evaluate(''./td[2]'', row, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent; if (value.split(/\n/)[1]) value = Zotero.Utilities.trimInternal(value.split(/\n/)[1]); if (field == "LDR") { record.leader = value; } else if (field != "FMT") { value = value.replace(/\┬ñ([a-z])/g, marc.subfieldDelimiter+ "$1"); var code = field.substring(0, 3); var ind = ""; if (field.length > 3) { ind = field[3]; if (field.length > 4) { ind += field[4]; } } record.addField(code, ind, value); } } } var item = new Zotero.Item(); record.translate(item); var oldauthors = item.creators; var newauthors = new Array(); for each (var aut in oldauthors) { if (aut.lastName.match(/^[A-Z][^\s]+\s[^\s]+/)) newauthors.push(Zotero.Utilities.cleanAuthor(aut.lastName.match(/^[A-Z][^\s]+\s[^\s]+/)[0].replace(/^([^\s]+)\s+(.*)$/, "$2 $1"), "author")); } item.creators = newauthors; item.complete(); }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('fc410e64-0252-4cd3-acb1-25e584775fa2', '1.0.0b4.r5', '', '2008-08-21 15:45:00', '0', '100', '4', 'National Library of Australia', 'Michael Berkowitz', 'http://librariesaustralia.nla.gov.au/', 'function detectWeb(doc, url) { if (url.match("action=Search")) { return "multiple"; } else if (url.match("action=Display")) { return "book"; } }', 'function doWeb(doc, url) { var n = doc.documentElement.namespaceURI; var ns = n ? function(prefix) { if (prefix == ''x'') return n; else return null; } : null; var books = new Array(); if (detectWeb(doc, url) == "multiple") { var items = Zotero.Utilities.getItemArray(doc, doc, ''action=Display&''); items = Zotero.selectItems(items); for (var i in items) { books.push(i); } } else { books = [url]; } Zotero.Utilities.processDocuments(books, function(doc) { var table = doc.evaluate(''//tbody/tr[td[1][@class="CellAlignRight"]/strong]'', doc, ns, XPathResult.ANY_TYPE, null); var row; var data = new Object(); while (row = table.iterateNext()) { var heading = doc.evaluate(''./td[1]'', row, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent; var value = doc.evaluate(''./td[2]'', row, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent; data[Zotero.Utilities.trimInternal(heading)] = value; } item = new Zotero.Item("book"); item.title = Zotero.Utilities.trimInternal(data[''Title:''].match(/^[^/]+/)[0]); if (data[''Author:'']) item.creators.push(Zotero.Utilities.cleanAuthor(data[''Author:''], "author", true)); if (data[''Published:''].match(/\w+/)) { var pub = data[''Published:''].match(/^([^:]+):(.*)\s+([^\s]+)$/); item.location = Zotero.Utilities.trimInternal(pub[1]); item.publisher = Zotero.Utilities.trimInternal(pub[2]); item.date = Zotero.Utilities.trimInternal(pub[3].replace(/\D/g, "")); } if (data[''Subjects:'']) { var kws = data[''Subjects:''].split("."); for each (var key in kws) { if (key.match(/\w+/)) item.tags.push(key); } } if (data[''ISBN:'']) item.ISBN = Zotero.Utilities.trimInternal(data[''ISBN:''].match(/^[^(]+/)[0]); item.complete(); }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('e40a27bc-0eef-4c50-b78b-37274808d7d2', '1.0.0b4.r5', '', '2008-06-06 08:45:00', '0', '100', '4', 'J-Stage', 'Michael Berkowitz', 'http://www.jstage.jst.go.jp/', 'function detectWeb(doc, url) { if (doc.evaluate(''//a[contains(@href, "_ris")]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "journalArticle"; } else if (doc.evaluate(''//tr/td[2]/table/tbody/tr/td/table/tbody/tr[td[2]//a]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext() || doc.evaluate(''//tr/td/table/tbody/tr/td/table/tbody/tr[td[1]//a]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } } ', 'function RISify(str) { return str.replace("_article", "_ris").replace("article", "download"); } function doWeb(doc, url) { var n = doc.documentElement.namespaceURI; var ns = n ? function(prefix) { if (prefix == ''x'') return n; else return null; } : null; var arts = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var xpath; var titlex; var linkx; if (doc.evaluate(''//tr/td[2]/table/tbody/tr/td/table/tbody/tr[td[2]//a]'', doc, ns, XPathResult.ANY_TYPE, null).iterateNext()) { xpath = ''//tr/td[2]/table/tbody/tr/td/table/tbody/tr[td[2]//a]''; titlex = ''./td[2]//strong''; linkx = ''./td[2]//a[1]''; } else if (doc.evaluate(''//tr/td/table/tbody/tr/td/table/tbody/tr[td[1]//a]'', doc, ns, XPathResult.ANY_TYPE, null).iterateNext()) { xpath = ''/html/body/div/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr[td//a[contains(@href, "_pdf")]]''; titlex = ''.//td/b''; linkx = ''.//td/a[contains(@href, "_article")]''; } Zotero.debug(xpath); var list = doc.evaluate(xpath, doc, ns, XPathResult.ANY_TYPE, null); var nextitem; while (nextitem = list.iterateNext()) { var title = Zotero.Utilities.trimInternal(doc.evaluate(titlex, nextitem, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent); var link = doc.evaluate(linkx, nextitem, ns, XPathResult.ANY_TYPE, null).iterateNext().href; items[link] = title; } items = Zotero.selectItems(items); for (var i in items) { arts.push(RISify(i)); } } else { arts = [RISify(url)]; } Zotero.debug(arts); for each (var uri in arts) { Zotero.Utilities.HTTP.doGet(uri, function(text) { Zotero.debug(text); var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { item.url = uri.replace("download", "article").replace("_ris", "_article"); var pdfurl = item.url.replace(/(\d+)_(\d+)\/_article/, "$2/_pdf").replace("download", "article"); Zotero.debug(pdfurl); item.attachments = [ {url:item.url, title:item.publicationTitle + " Snapshot", mimeType:"text/html"}, {url:pdfurl, title:item.publicationTitle + " PDF", mimeType:"application/pdf"} ]; item.complete(); }); translator.translate(); }); } }'); REPLACE INTO translators VALUES ('bbf1617b-d836-4665-9aae-45f223264460', '1.0.0b4.r5', '', '2008-06-03 19:40:00', '0', '100', '4', 'A Contra Corriente', 'Michael Berkowitz', 'http://www.ncsu.edu/project/acontracorriente', 'function detectWeb(doc, url) { if (doc.evaluate(''//tr[td[1]//img][td[3]]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } }', 'function doWeb(doc, url) { var arts = doc.evaluate(''//tr[td[1]//img][td[3]]'', doc, null, XPathResult.ANY_TYPE, null); var art; var selectList = new Object(); var items = new Object(); while (art = arts.iterateNext()) { var item = new Object(); var title = doc.evaluate(''.//a'', art, null, XPathResult.ANY_TYPE, null).iterateNext(); item[''title''] = Zotero.Utilities.trimInternal(title.textContent); item[''pdfurl''] = title.href; item[''author''] = doc.evaluate(''.//strong'', art, null, XPathResult.ANY_TYPE, null).iterateNext().textContent; selectList[item.title] = item.title; items[item.title] = item; } var selected = Zotero.selectItems(selectList); var voliss = Zotero.Utilities.trimInternal(doc.evaluate(''//td[@class="red01"]/font[2]/strong'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); voliss = voliss.match(/Vol\.\s+(\d+),\s+No\.\s+(\d+)\.\s+([^|]+)|/); Zotero.debug(voliss); for each (var title in selected) { var item = new Zotero.Item("journalArticle"); var olditem = items[title]; item.title = olditem.title; item.creators = [Zotero.Utilities.cleanAuthor(olditem.author, "author")]; item.volume = voliss[1]; item.issue = voliss[2] item.date = Zotero.Utilities.trimInternal(voliss[3]); item.complete(); } }'); REPLACE INTO translators VALUES ('0aea3026-a246-4201-a4b5-265f75b9a6a7', '1.0.0b4.r5', '', '2008-05-30 08:00:00', '0', '100', '4', 'Australian Dictionary of Biography', 'Tim Sherratt and Michael Berkowitz', 'http://www.adb.online.anu.edu.au', 'function detectWeb(doc, url) { if (url.match(/adbp-ent_search|browse_people|browse_authors/)) { return "multiple"; } else if (url.match(/biogs\/AS*\d+b.htm/)) { return "bookSection"; } }', 'function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == "x") return namespace; else return null; } : null; if (detectWeb(doc, url) == "multiple") { var records = new Array(); var items = new Object(); if (url.match(/browse_people/)) { var titles = doc.evaluate(''//ul[@class="pb-results"]/li'', doc, nsResolver, XPathResult.ANY_TYPE, null); var links = doc.evaluate(''//ul[@class="pb-results"]/li/a[1]'', doc, nsResolver, XPathResult.ANY_TYPE, null); } else if (url.match(/browse_authors/)) { var titles = doc.evaluate(''//div[@id="content"]/dl/dd'', doc, nsResolver, XPathResult.ANY_TYPE, null); var links = doc.evaluate(''//div[@id="content"]/dl/dd/a[1]'', doc, nsResolver, XPathResult.ANY_TYPE, null); } else if (url.match(/adbp-ent_search/)) { var titles = doc.evaluate(''//div[@id="content"]/ol/li'', doc, nsResolver, XPathResult.ANY_TYPE, null); var links = doc.evaluate(''//div[@id="content"]/ol/li//a[1]'', doc, nsResolver, XPathResult.ANY_TYPE, null); } var title; var link; while ((link = links.iterateNext()) && (title = titles.iterateNext())) { items[link.href] = Zotero.Utilities.trimInternal(title.textContent); } items = Zotero.selectItems(items); for (var i in items) { records.push(i); } } else { records = [url]; } Zotero.Utilities.processDocuments(records, function(doc) { var item = new Zotero.Item("bookSection"); var author = Zotero.Utilities.cleanString(doc.evaluate(''//div[@id="content"]/p[strong="Author"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().lastChild.textContent); item.creators.push(Zotero.Utilities.cleanAuthor(author, "author")); item.title = Zotero.Utilities.cleanString(doc.evaluate(''//h1'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); var pubdetails = Zotero.Utilities.cleanString(doc.evaluate(''//div[@id="content"]/p[strong="Print Publication Details"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); pubdetails = pubdetails.match(/Volume (\d+), ([\w ]+), (\d{4}), p+\.*\s+([\d-]+)/); item.volume = RegExp.$1; item.publisher = RegExp.$2; item.date = RegExp.$3; item.pages = RegExp.$4; item.url = doc.location.href; item.bookTitle = "Australian Dictionary of Biography"; item.place = "Melbourne"; item.repository = "Australian Dictionary of Biography"; var tags = doc.evaluate(''//li/a[starts-with(@title, "find people with the occupation")]'', doc, nsResolver, XPathResult.ANY_TYPE, null); while (tag = tags.iterateNext()) { item.tags.push(tag.textContent); } item.attachments = [ {url:item.url, title: "Snapshot - " + item.title, mimeType:"text/html"}, ]; item.complete(); }, function() {Zotero.done;}); }'); REPLACE INTO translators VALUES ('83538f48-906f-40ef-bdb3-e94f63676307', '1.0.0b4.r5', '', '2008-05-30 08:00:00', '1', '100', '4', 'NAA RecordSearch', 'Tim Sherratt', 'http://naa12.naa.gov.au/scripts/', 'function detectWeb(doc, url) { if (url.match(/Items_listing.asp/i)) { return "multiple"; } else if (url.match(/ItemDetail.asp/i)) { return "manuscript"; } }', 'function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; if (detectWeb(doc, url) == "multiple") { var records = new Array(); var items = new Object(); var titles = doc.evaluate(''//form[2]/table/tbody/tr/td[b="Title"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var links = doc.evaluate(''//form[2]/table/tbody/tr/td[b="Control symbol"]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var title; var link; while ((title = titles.iterateNext()) && (link = links.iterateNext())) { items[link.href] = Zotero.Utilities.trimInternal(title.lastChild.textContent); } items = Zotero.selectItems(items); for (var i in items) { records.push(i); } } else { records = [url]; } Zotero.Utilities.processDocuments(records, function(doc) { var title = Zotero.Utilities.cleanString(doc.evaluate(''//table/tbody/tr/td[b="Title"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().lastChild.textContent); var series = Zotero.Utilities.cleanString(doc.evaluate(''//table/tbody/tr/td[b="Series number"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().lastChild.textContent); var control = Zotero.Utilities.cleanString(doc.evaluate(''//table/tbody/tr/td[b="Control symbol"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().lastChild.textContent); var date = Zotero.Utilities.cleanString(doc.evaluate(''//table/tbody/tr/td[b="Contents date range"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().lastChild.textContent); var access = Zotero.Utilities.cleanString(doc.evaluate(''//table/tbody/tr/td[b="Access status"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().lastChild.textContent); var location = Zotero.Utilities.cleanString(doc.evaluate(''//table/tbody/tr/td[b="Location"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().lastChild.textContent); var barcode = Zotero.Utilities.cleanString(doc.evaluate(''//table/tbody/tr/td[b="Barcode"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().lastChild.textContent); if (doc.body.innerHTML.match("View digital copy")) { var digitised = "yes"; } else { var digitised = "no"; } var repository ="National Archives of Australia, " + location; var url = "http://www.aa.gov.au/cgi-bin/Search?O=I&Number=" + barcode; var ref_number = series + ", " + control; var type = "file"; var item = new Zotero.Item("manuscript"); item.title = title; item.archiveLocation = ref_number; item.url = url; item.date = date; item.manuscriptType = type; item.extra = "Access: " + access + "\nDigitised: " + digitised; item.repository = repository; item.complete(); }, function() {Zotero.done;}); }'); REPLACE INTO translators VALUES ('cdf8269c-86b9-4039-9bc4-9d998c67740e', '1.0.0b4.r5', '', '2008-05-21 19:15:00', '0', '100', '4', 'Verniana-Jules Verne Studies', 'Michael Berkowitz', 'http://jv.gilead.org.il/studies/', 'function detectWeb(doc, url) { if (url.match(/article\/view/)) { return "journalArticle"; } else if (url.match(/(issue|advancedResults)/)) { return "multiple"; } }', 'function prepNos(link) { if (link.match(/\d+\/\d+$/)) { var nos = link.match(/\d+\/\d+$/)[0]; } else { var nos = link.match(/\d+$/)[0] + ''/0''; } return ''http://jv.gilead.org.il/studies/index.php/studies/rt/captureCite/'' + nos + ''/RefManCitationPlugin''; } function doWeb(doc, url) { var n = doc.documentElement.namespaceURI; var ns = n ? function(prefix) { if (prefix == ''x'') return n; else return null; } : null; var arts = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var xpath = ''//tr[td/a[2]]''; if (url.match(/issue/)) { var titlex = ''./td[1]''; var linkx = ''./td[2]/a[contains(text(), "HTML")]''; } else if (url.match(/advanced/)) { var titlex = ''./td[2]''; var linkx = ''./td[3]/a[contains(text(), "HTML")]''; } var results = doc.evaluate(xpath, doc, ns, XPathResult.ANY_TYPE, null); var result; while (result = results.iterateNext()) { var title = Zotero.Utilities.trimInternal(doc.evaluate(titlex, result, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent); var link = doc.evaluate(linkx, result, ns, XPathResult.ANY_TYPE, null).iterateNext().href; items[link] = title; } items = Zotero.selectItems(items); for (var i in items) { arts.push(prepNos(i)); } } else { arts = [prepNos(url)]; } Zotero.Utilities.HTTP.doGet(arts, function(text) { var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { var auts = new Array(); for each (var aut in item.creators) { auts.push(Zotero.Utilities.cleanAuthor(aut.lastName, "author")); } item.creators = auts; item.attachments = [{url:item.url, title:"Verniana Snapshot", mimeType:"text/html"}]; var bits = item.publicationTitle.split(/;/); item.publicationTitle = bits[0]; var voliss = bits[1].match(/Vol\s+(\d+)\s+\((\d+)\)/); item.volume = voliss[1]; item.date = voliss[2]; item.complete(); }); translator.translate(); }); Zotero.wait(); }'); REPLACE INTO translators VALUES ('b33af0e1-d122-45b2-b144-4b4eedd12d5d', '1.0.0b4.r5', '', '2008-05-21 19:15:00', '0', '100', '4', 'Wildlife Biology in Practice', 'Michael Berkowitz', 'http://www.socpvs.org/journals/index.php/wbp', 'function detectWeb(doc, url) { if (url.match(/showToc/) || url.match(/advancedResults/)) { return "multiple"; } else if (url.match(/article/)) { return "journalArticle"; } }', 'function doWeb(doc, url) { var n = doc.documentElement.namespaceURI; var ns = n ? function(prefix) { if (prefix == ''x'') return n; else return null; } : null; var arts = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var xpath = ''//tr[td/a[2]]''; if (url.match(/issue/)) { var linkx = ''./td[2]/a[1]''; var titlex = ''./td[1]''; } else if (url.match(/advanced/)) { var linkx = ''./td[3]/a[1]''; var titlex = ''./td[2]''; } var results = doc.evaluate(xpath, doc, ns, XPathResult.ANY_TYPE, null); var result; while (result = results.iterateNext()) { var title = doc.evaluate(titlex, result, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent; var link = doc.evaluate(linkx, result, ns, XPathResult.ANY_TYPE, null).iterateNext().href; items[link] = Zotero.Utilities.trimInternal(title); } items = Zotero.selectItems(items); for (var i in items) { arts.push(i.replace(/view/, "viewArticle")); } } else { arts = [url.replace(/viewRST/, "viewArticle")]; } Zotero.Utilities.processDocuments(arts, function(doc) { var item = new Zotero.Item("journalArticle"); var voliss = Zotero.Utilities.trimInternal(doc.evaluate(''//div[@id="main"]/h2'', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent); voliss = voliss.match(/^([^,]+),\s+([^;]+);\s+(\d+)\((\d+)\);\s+([^;]+)/); item.journalAbbreviation = voliss[1]; item.date = voliss[2]; item.issue = voliss[3]; item.volume = voliss[4]; item.pages = voliss[5]; var authors = doc.evaluate(''//div[@id="authorDetails"]/ul[@class="lista"]/li/strong/a'', doc, ns, XPathResult.ANY_TYPE, null); var author; while (author = authors.iterateNext()) { item.creators.push(Zotero.Utilities.cleanAuthor(author.title.match(/^\w+\b\s+(.*)\s+\b\w+$/)[1], "author")); } item.publicationTitle = "Wildlife Biology in Practice"; item.ISSN = "1646-2742"; item.DOI = doc.evaluate(''//div[@id="copyArticle"]/a[1]'', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent.match(/doi:\s+([^\s]+)/)[1]; item.url = doc.location.href; item.title = Zotero.Utilities.trimInternal(doc.evaluate(''//div[@id="content"]/h3'', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent); item.abstractNote = Zotero.Utilities.trimInternal(doc.evaluate(''//div[@id="abstract"]/blockquote/p'', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent); item.tags = doc.evaluate(''//div[@id="abstract"]'', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent.match(/Keywords:\s+([^\.]+)/)[1].split(/,\s+/); var pdfurl = doc.evaluate(''//div[@id="rt"]/a[@class="action noarrow"]'', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().href; item.attachments = [ {url:item.url, title:item.publicationTitle + " Snapshot", mimeType:"text/html"}, {url:pdfurl, title:item.publicationTitle + " PDF", mimeType:"application/pdf"} ]; item.complete(); }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('d2416f31-4f24-4e18-8c66-06122af5bc2c', '1.0.0b4.r5', '', '2008-05-20 19:10:00', '0', '100', '4', 'Women in Judaism', 'Michael Berkowitz', 'http://jps.library.utoronto.ca/', 'function detectWeb(doc, url) { if (doc.evaluate(''//tr[td/a[2]]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else if (url.match(/article\/view/)) { return "journalArticle"; } }', 'function doWeb(doc, url) { var n = doc.documentElement.namespaceURI; var ns = n ? function(prefix) { if (prefix == ''x'') return n; else return null; } : null; var arts = new Array(); if (detectWeb(doc, url) == "multiple") { var xpath = ''//tr[td/a[2]]''; if (url.match(/search/)) { var titlex = ''./td[2]''; var linkx = ''./td[3]/a[1]''; } else if (url.match(/issue/)) { var titlex = ''./td[1]''; var linkx = ''./td[2]/a[1]''; } var items = new Object(); var results = doc.evaluate(xpath, doc, ns, XPathResult.ANY_TYPE, null); var result; while (result = results.iterateNext()) { var title = Zotero.Utilities.trimInternal(doc.evaluate(titlex, result, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent); var link = doc.evaluate(linkx, result, ns, XPathResult.ANY_TYPE, null).iterateNext().href; items[link] = title; } items = Zotero.selectItems(items); for (var i in items) { arts.push(i.replace("view", "viewArticle")); } } else { arts = [url]; } Zotero.debug(arts); Zotero.Utilities.processDocuments(arts,function(doc) { var newDoc = doc; //var newDoc = doc.defaultView.window.frames[0].document; Zotero.debug(newDoc.location.href); var item = new Zotero.Item("journalArticle"); if (newDoc.evaluate(''//div[@class="Section1"]/div/p/b/span'', newDoc, ns, XPathResult.ANY_TYPE, null).iterateNext()) { item.title = Zotero.Utilities.trimInternal(newDoc.evaluate(''//div[@class="Section1"]/div/p/b/span'', newDoc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent); } else { item.title = Zotero.Utilities.trimInternal(newDoc.evaluate(''//div[@id="content"]/h3'', newDoc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent); } var absX = ''//div[@id="content"]/div[2]''; if (newDoc.evaluate(absX, newDoc, ns, XPathResult.ANY_TYPE, null).iterateNext()) item.abstractNote = Zotero.Utilities.trimInternal(newDoc.evaluate(absX, newDoc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent); if (newDoc.evaluate(''//div[@id="content"]/div/i'', newDoc, ns, XPathResult.ANY_TYPE, null).iterateNext()) { var authors = newDoc.evaluate(''//div[@id="content"]/div/i'', newDoc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent.split(/,\s+/); for each (var aut in authors) { item.creators.push(Zotero.Utilities.cleanAuthor(aut, "author")); } var voliss = newDoc.evaluate(''//div[@id="breadcrumb"]/a[2]'', newDoc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent.match(/(\d+)/g); item.volume = voliss[0]; item.issue = voliss[1]; item.date = voliss[2]; } var pdfurl = doc.evaluate(''//a[contains(text(), "PDF")]'', newDoc, ns, XPathResult.ANY_TYPE, null).iterateNext().href.replace("view", "download"); item.attachments = [ {url:doc.location.href, title:"Women In Judaism Snapshot", mimeType:"text/html"}, {url:pdfurl, title:"Women In Judaism PDF", mimeType:"application/pdf"} ]; item.complete(); }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('4f62425a-c99f-4ce1-b7c1-5a3ac0d636a3', '1.0.0b4.r5', '', '2008-05-20 19:10:00', '0', '100', '4', 'AfroEuropa', 'Michael Berkowitz', 'http://journal.afroeuropa.eu/', 'function detectWeb(doc, url) { if (doc.evaluate(''//tr[td/a[2]]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else if (url.match(/article\/view\//)) { return "journalArticle"; } }', 'function makeExport(site, str) { var nums = str.match(/\d+(\/\d+)?/)[0]; if (!nums.match(/\//)) nums += "/0"; return site + ''rt/captureCite/'' + nums + ''/referenceManager''; } function doWeb(doc, url) { var n = doc.documentElement.namespaceURI; var ns = n ? function(prefix) { if (prefix == ''x'') return n; else return null; } : null; var site = url.match(/^http:\/\/([^/]*\/)+index\.php\/[^/]*\//)[0]; var arts = new Array(); if (detectWeb(doc, url) == "multiple") { var xpath = ''//tr[td/a]''; if (url.match(/search/)) { var titlex = ''./td[2]''; var linkx = ''./td[3]/a[1]''; } else if (url.match(/issue/)) { var titlex = ''./td[1]''; var linkx = ''./td[2]/a[1]''; } var items = new Object(); var results = doc.evaluate(xpath, doc, ns, XPathResult.ANY_TYPE, null); var result; while (result = results.iterateNext()) { var title = Zotero.Utilities.trimInternal(doc.evaluate(titlex, result, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent); var link = doc.evaluate(linkx, result, ns, XPathResult.ANY_TYPE, null).iterateNext().href; items[makeExport(site, link)] = title; } items = Zotero.selectItems(items); for (var i in items) { arts.push(i); } } else { arts = [makeExport(cite, url)]; } Zotero.Utilities.HTTP.doGet(arts, function(text) { var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { item.title = Zotero.Utilities.capitalizeTitle(item.title); var voliss = item.publicationTitle.split(/;\s+/); item.publicationTitle = Zotero.Utilities.trimInternal(voliss[0]); voliss = voliss[1].match(/(\d+),\s+No\s+(\d+)\s+\((\d+)\)/); item.volume = voliss[1]; item.issue = voliss[2]; item.date = voliss[3]; var auts = new Array(); for each (var aut in item.creators) { auts.push(aut.lastName); } item.creators = new Array(); for each (var aut in auts) { item.creators.push(Zotero.Utilities.cleanAuthor(aut, "author")); } item.attachments[0].mimeType = "text/html"; item.attachments[0].title = "AfroEuropa Snapshot"; item.complete(); }); translator.translate(); }); Zotero.wait(); }'); REPLACE INTO translators VALUES ('882f70a8-b8ad-403e-bd76-cb160224999d', '1.0.0b4.r5', '', '2008-05-19 17:20:00', '0', '100', '4', 'Vanderbilt eJournals', 'Michael Berkowitz', 'http://ejournals.library.vanderbilt.edu/', 'function detectWeb(doc, url) { if (url.match(/viewarticle.php/)) { return "journalArticle"; } else if (url.match(/viewissue.php/) || url.match(/search.php/)) { return "multiple"; } }', 'function doWeb(doc, url) { var n = doc.documentElement.namespaceURI; var ns = n ? function (prefix) { if (prefix == ''x'') return n; else return null; } : null; var arts = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); if (doc.evaluate(''/html/body/table/tbody/tr/td[2]/ul/li'', doc, ns, XPathResult.ANY_TYPE, null).iterateNext()) { var results = doc.evaluate(''/html/body/table/tbody/tr/td[2]/ul/li'', doc, ns, XPathResult.ANY_TYPE, null); var titleX = ''./span[@class="toctitle"]''; var linkX = ''.//a[contains(text(), "Abstract")]''; /*var res; while (res = results.iterateNext()) { var title = doc.evaluate(''./span[@class="toctitle"]'', res, ns, XPathResult.ANY_TYPE, null).iterateNext.textContent; var link = doc.evaluate(''.//a[contains(text(), "Abstract")]'', res, ns, XPathResult.ANY_TYPE, null).iterateNext.href; items[link] = title; }*/ } else { var results = doc.evaluate(''//tr[td[3]//a[contains(text(), "Abstract")]]'', doc, ns, XPathResult.ANY_TYPE, null); var titleX = ''./td[2]''; var linkX = ''./td[3]//a''; } var res; while (res = results.iterateNext()) { var title = doc.evaluate(titleX, res, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent; var link = doc.evaluate(linkX, res, ns, XPathResult.ANY_TYPE, null).iterateNext().href; items[link] = Zotero.Utilities.trimInternal(title); } items = Zotero.selectItems(items); for (var i in items) { arts.push(i); } } else { arts = [url]; } Zotero.Utilities.processDocuments(arts, function(doc) { var pdfurl = doc.evaluate(''//a[contains(text(), "PDF")]'', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().href; var gets = doc.location.href.match(/^(http:\/\/[^/]+\/[^/]+\/).*id=(\d+)/); var risurl = gets[1] + ''rst/rst.php?op=capture_cite&id='' + gets[2] + ''&cite=refman''; Zotero.Utilities.HTTP.doGet(risurl, function(text) { var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { var voliss = item.publicationTitle.split(/;/); item.publicationTitle = voliss[0]; voliss = voliss[1].match(/Vol\.\s+(\d+)(,\s+No\.\s+(\d+))?\s+\((\d+)\)/); item.volume = voliss[1]; if (voliss[3]) item.issue = voliss[3]; item.date = voliss[4]; item.attachments = [ {url:item.url, title:item.publicationTitle + " Snapshot", mimeType:"text/html"}, {url:pdfurl, title:item.publicationTitle + " PDF", mimeType:"application/pdf"} ]; item.complete(); }); translator.translate(); }); }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('4363275e-5cc5-4627-9a7f-951fb58a02c3', '1.0.0b4.r5', '', '2008-05-15 19:30:00', '0', '100', '4', 'Cornell University Press', 'Michael Berkowitz', 'http://www.cornellpress.cornell.edu/', 'function detectWeb(doc, url) { if (url.match("detail.taf")) { return "book"; } else if (url.match("list.taf") || url.match("listsearch.taf")) { return "multiple"; } }', 'function doWeb(doc, url) { var n = doc.documentElement.namespaceURI; var ns = n ? function (prefix) { if (prefix == ''x'') return n; else return null; } : null; var books = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var titles = doc.evaluate(''//tr/td[2]/a'', doc, ns, XPathResult.ANY_TYPE, null); var title; while (title = titles.iterateNext()) { if (title.textContent.match(/\w+/)) items[title.href] = Zotero.Utilities.trimInternal(title.textContent); } items = Zotero.selectItems(items); for (var i in items) { books.push(i); } } else { books = [url]; } Zotero.Utilities.processDocuments(books, function(doc) { var item = new Zotero.Item("book"); item.title = Zotero.Utilities.capitalizeTitle(doc.evaluate(''//span[@class="bktitle"]'', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent); var authors = doc.evaluate(''//div[@id="detail"]/table/tbody/tr/td/form/a'', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent.split(/;/); Zotero.debug(authors); for each (var aut in authors) { if (aut.match(/Translator/)) { item.creators.push(Zotero.Utilities.cleanAuthor(aut.match(/^(.*)\s+\(/)[1], "translator")); } else if (aut.match(/Editor/)) { item.creators.push(Zotero.Utilities.cleanAuthor(aut.match(/^(.*)\s+\(/)[1], "editor")); } else { item.creators.push(Zotero.Utilities.cleanAuthor(aut, "author")); } } var bits = doc.evaluate(''//div[@id="detail"]/table/tbody/tr/td/form'', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent; item.ISBN = bits.match(/ISBN:\s+([\d\-]+)/)[1]; item.date = bits.match(/\d{4}/)[0]; item.abstractNote = Zotero.Utilities.trimInternal(doc.evaluate(''//div[@id="description"]'', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent); item.complete(); }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('a75e0594-a9e8-466e-9ce8-c10560ea59fd', '1.0.0b4.r5', '', '2008-05-15 18:30:00', '0', '100', '4', 'Columbia University Press', 'Michael Berkowitz', 'http://www.cup.columbia.edu/', 'function detectWeb(doc, url) { if (url.match(/book\//)) { return "book"; } else if (doc.evaluate(''//p[@class="header"]/a/span[@class="_booktitle"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } }', 'function addTag(item, tag, xpath) { item[tag] = Zotero.Utilities.trimInternal(doc.evaluate(xpath, doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent); } function doWeb(doc, url) { var n = doc.documentElement.namespaceURI; var ns = n ? function(prefix) { if (prefix == ''x'') return n; else return null; } : null; var books = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var titles = doc.evaluate(''//p[@class="header"]/a'', doc, ns, XPathResult.ANY_TYPE, null); var title; while (title = titles.iterateNext()) { items[title.href] = title.textContent; } items = Zotero.selectItems(items); for (var i in items) { books.push(i); } } else { books = [url]; } Zotero.Utilities.processDocuments(books, function(doc) { var item = new Zotero.Item("book"); item.title = Zotero.Utilities.trimInternal(doc.evaluate(''//h1[@id="_booktitle"]'', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent); var authors = Zotero.Utilities.trimInternal(doc.evaluate(''//p[@id="_authors"]'', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent); if (authors.match(/Edited/)) { authors = Zotero.Utilities.trimInternal(authors.replace("Edited by", "")); var autType = "editor"; } else { var autType = "author"; } var auts = authors.split(/,|\band\b/); for each (var aut in auts) { item.creators.push(Zotero.Utilities.cleanAuthor(aut, autType)); } item.abstractNote = Zotero.Utilities.trimInternal(doc.evaluate(''//p[@id="_desc"]'', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent); item.date = Zotero.Utilities.trimInternal(doc.evaluate(''//span[@id="_publishDate"]'', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent); item.ISBN = Zotero.Utilities.trimInternal(doc.evaluate(''//span[@id="_isbn"]'', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent); item.publisher = Zotero.Utilities.trimInternal(doc.evaluate(''//span[@id="_publisher"]'', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent); item.complete(); }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('0c661209-5ec8-402b-8f18-7dec6ae37d95', '1.0.0b4.r5', '', '2008-05-15 00:30:00', '0', '100', '4', 'The Free Dictionary', 'Michael Berkowitz', 'http://(.*\.)?thefreedictionary.com/(\w+)', 'function detectWeb(doc, url) { return "dictionaryEntry"; }', 'function doWeb(doc, url) { var item = new Zotero.Item(''dictionaryEntry''); item.title = Zotero.Utilities.capitalizeTitle(url.replace("+", " ").match(/[^/]+$/)[0]); item.dictionaryTitle = "The Free Dictionary"; var defs = doc.evaluate(''//div[@class="pseg"]'', doc, null, XPathResult.ANY_TYPE, null); var def; while (def = defs.iterateNext()) { item.notes.push({note:Zotero.Utilities.trimInternal(def.textContent)}); } item.url = item.complete(); }'); REPLACE INTO translators VALUES ('46291dc3-5cbd-47b7-8af4-d009078186f6', '1.0.0b4.r5', '', '2008-05-15 00:30:00', '0', '100', '4', 'CiNii', 'Michael Berkowitz', 'http://ci.nii.ac.jp/naid/', 'function detectWeb(doc, url) { if (url.match(/(naid|QuotDisp)/)) { return "journalArticle"; } else if (doc.evaluate(''//a[contains(@href, "QuotDisp") or contains(@href, "/naid/")]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } }', 'function doWeb(doc, url) { var n = doc.documentElement.namespaceURI; var ns = n ? function(prefix) { if (prefix == ''x'') return n; else return null; } : null; var arts = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var links = doc.evaluate(''//a[contains(@href, "QuotDisp") or contains(@href, "/naid/")]'', doc, ns, XPathResult.ANY_TYPE, null); var link; while (link = links.iterateNext()) { items[link.href] = Zotero.Utilities.trimInternal(link.textContent); } items = Zotero.selectItems(items); for (var i in items) { arts.push(i); } } else { arts = [url]; } Zotero.Utilities.processDocuments(arts, function(doc) { var biblink = doc.evaluate(''//a[contains(text(), "BibTex")]'', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().href; var newurl = doc.location.href; var tags = new Array(); if (doc.evaluate(''//a[@class="keyword"]'', doc, ns, XPathResult.ANY_TYPE, null).iterateNext()) { var kws = doc.evaluate(''//a[@class="keyword"]'', doc, ns, XPathResult.ANY_TYPE, null); var kw; while (kw = kws.iterateNext()) { tags.push(Zotero.Utilities.trimInternal(kw.textContent)); } } Zotero.Utilities.HTTP.doGet(biblink, function(text) { var trans = Zotero.loadTranslator("import"); trans.setTranslator("9cb70025-a888-4a29-a210-93ec52da40d4"); trans.setString(text); trans.setHandler("itemDone", function(obj, item) { item.url = newurl; item.attachments = [{url:item.url, title:item.title + " Snapshot", mimeType:"text/html"}]; item.tags = tags; item.complete(); }); trans.translate(); }); }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('75edc5a1-6470-465a-a928-ccb77d95eb72', '1.0.0b4.r5', '', '2008-05-12 19:00:00', '0', '100', '4', 'American Institute of Aeronautics and Astronautics', 'Michael Berkowitz', 'http://www.aiaa.org/', 'function detectWeb(doc, url) { if (doc.evaluate(''//td/div[@class="title"]/b/div[@class="centerHeadlines"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } }', 'function doWeb(doc, url) { var n = doc.documentElement.namespaceURI; var ns = n ? function(prefix) { if (prefix == ''x'') return n; else return null; } : null; var items = new Object(); var oldItems = doc.evaluate(''//table/tbody/tr/td[div[@class="title"]]'', doc, ns, XPathResult.ANY_TYPE, null); var nextItem; while (nextItem = oldItems.iterateNext()) { var data = new Object(); data[''title''] = Zotero.Utilities.trimInternal(doc.evaluate(''./div[@class="title"]//div[@class="centerHeadlines"]'', nextItem, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent); data[''pages''] = Zotero.Utilities.trimInternal(doc.evaluate(''./div[@class="title"]//div[@class="centerHeadlinesSub2"]'', nextItem, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent.match(/[\d\w]+\-[\d\w]+/)[0]); data[''authors''] = Zotero.Utilities.trimInternal(doc.evaluate(''./ul/i'', nextItem, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent); var extra = Zotero.Utilities.trimInternal(doc.evaluate(''./ul'', nextItem, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent); var extra = extra.replace(data[''authors''], ""); data[''extra''] = Zotero.Utilities.trimInternal(extra); var pdf = doc.evaluate(''.//a'', nextItem, ns, XPathResult.ANY_TYPE, null).iterateNext().href; Zotero.debug(pdf); data[''pdfurl''] = pdf; items[data[''title'']] = data; } var volume; var issue; var date; if (doc.evaluate(''//td[2]/table/tbody/tr/td[1]/strong'', doc, ns, XPathResult.ANY_TYPE, null).iterateNext()) { var voliss = Zotero.Utilities.trimInternal(doc.evaluate(''//td[2]/table/tbody/tr/td[1]/strong'', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent); voliss = voliss.match(/(\d+)\s+vol\.\s*(\d+)\s+no\.\s*(\d+)/); volume = voliss[2]; issue = voliss[3]; date = voliss[1]; } else if (doc.evaluate(''//select'', doc, ns, XPathResult.ANY_TYPE, null).iterateNext()) { var voliss = Zotero.Utilities.trimInternal(doc.evaluate(''//select[@name="volume"]/option[@selected]'', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent); var issue = Zotero.Utilities.trimInternal(doc.evaluate(''//select[@name="issue"]/option[@selected]'', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent); voliss = voliss.match(/vol\.\s*(\d+)\s*\-\s*(\d+)/); volume = voliss[1]; date = voliss[2]; } if (doc.evaluate(''//tr[1]/td/b/div[@class="centerHeadlines"]'', doc, ns, XPathResult.ANY_TYPE, null).iterateNext()) { var journal = Zotero.Utilities.trimInternal(doc.evaluate(''//tr[1]/td/b/div[@class="centerHeadlines"]'', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent); var ISSN = Zotero.Utilities.trimInternal(doc.evaluate(''//tr[1]/td/font[@class="centerHeadlinesSub2"]'', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent.replace(/(\(|\))/g, "")); } else if (doc.evaluate(''//div[@class="centerHeadlinesTitle"]'', doc, ns, XPathResult.ANY_TYPE, null).iterateNext()) { var journal = Zotero.Utilities.trimInternal(doc.evaluate(''//div[@class="centerHeadlinesTitle"]'', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent); var ISSN = Zotero.Utilities.trimInternal(doc.evaluate(''//tr/td[1]/table/tbody/tr[2]/td/div'', doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent.match(/ISSN\s*([\d\-]+)/)[1]); } var searchItems = new Array(); for (var i in items) { searchItems.push(i); } searchItems = Zotero.selectItems(searchItems); for (var i in items) { for each (var title in searchItems) { if (i == title) { var data = items[i]; var item = new Zotero.Item("journalArticle"); item.volume = volume; item.issue = issue; item.date = date; item.title = data[''title'']; item.pages = data[''pages'']; item.publicationTitle = Zotero.Utilities.capitalizeTitle(journal); item.ISSN = ISSN; if (data[''authors''].match(/\w+/)) { var authors = data[''authors''].split(/(\band\b|,|;)/); for each (var aut in authors) { if (aut.match(/\w+/) && aut != "and") { item.creators.push(Zotero.Utilities.cleanAuthor(aut, "author")); } } } item.attachments = [{url:data[''pdfurl''], title:"AIAA PDF (first page)", mimeType:"application/pdf"}]; item.complete(); } } } }'); REPLACE INTO translators VALUES ('635c1246-e0c8-40a0-8799-a73a0b013ad8', '1.0.0b4.r5', '', '2008-05-09 23:15:00', '0', '100', '4', 'Bryn Mawr Classical Review', 'Michael Berkowitz', 'http://ccat.sas.upenn.edu/bmcr/', 'function detectWeb(doc, url) { if (url.match(/by_reviewer/) || url.match(/by_author/) || url.match(/recent.html/) || url.match(/\/\d{4}\/$/)) { return "multiple"; } else if (url.match(/[\d\-]+\.html$/)) { return "journalArticle"; } }', 'function doWeb(doc, url) { var ns = doc.documentElement.namespaceURI; var nsResolver = ns ? function(prefix) { if (prefix == ''x'') return ns; else return null; } : null; var arts = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); if (doc.evaluate(''//table/tbody/tr/td/ul/li/i'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var boxes = doc.evaluate(''//table/tbody/tr/td/ul/li'', doc, nsResolver, XPathResult.ANY_TYPE, null); var box; while (box = boxes.iterateNext()) { var link = doc.evaluate(''./a'', box, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().href; var title = doc.evaluate(''./i'', box, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; items[link] = title; } } else if (doc.evaluate(''//table/tbody/tr/td/ul/li'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var title = doc.evaluate(''//table/tbody/tr/td/ul/li'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next; while (next = title.iterateNext()) { items[next.href] = Zotero.Utilities.trimInternal(next.textContent); } } else if (url.match(/google\.com/)) { var titles = doc.evaluate(''//h2[@class="r"]/a[@class="l"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var title; while (title = titles.iterateNext()) { items[title.href] = title.textContent; } } items = Zotero.selectItems(items); for (var i in items) { arts.push(i); } } else { arts = [url]; } Zotero.Utilities.processDocuments(arts, function(doc) { var item = new Zotero.Item("journalArticle"); var title = doc.evaluate(''//h3/i'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; item.title = "Review of: " + Zotero.Utilities.trimInternal(title); var data = doc.evaluate(''//h3[i]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; var title = title.replace("(", "\\(").replace(")", "\\)"); var author = doc.evaluate(''//b[contains(text(), "Reviewed")]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.match(/Reviewed by\s+([^,]+),/)[1]; item.creators.push(Zotero.Utilities.cleanAuthor(author, "author")); var splitRe = new RegExp(title); var authors = data.split(splitRe)[0].replace(/\([^)]+\)/, "").split(/(,|and)\s+/); Zotero.debug(authors); Zotero.debug(authors); for each (var aut in authors) { if (aut.match(/\w/) && (aut != "and")) { item.creators.push(Zotero.Utilities.cleanAuthor(aut, "reviewedAuthor")); } } item.url = doc.location.href; item.attachments = [{url:item.url, title:item.title, mimeType:"text/html"}]; if (doc.evaluate(''/html/body/center/table/tbody/tr/td/center/table/tbody/tr/td/center/font'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { item.date = Zotero.Utilities.trimInternal(doc.evaluate(''/html/body/center/table/tbody/tr/td/center/table/tbody/tr/td/center/font'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.replace("Bryn Mawr Classical Review ", "").replace(/\./g, "/")); } else { item.date = Zotero.Utilities.trimInternal(doc.evaluate(''/html/body/h3'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.replace("Bryn Mawr Classical Review ", "").replace(/\./g, "/")) } item.complete(); }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('9499c586-d672-42d6-9ec4-ee9594dcc571', '1.0.0b4.r5', '', '2008-05-08 20:30:00', '0', '100', '4', 'The Hindu', 'Prashant Iyengar and Michael Berkowitz', 'http://(www.)?hindu.com', 'function detectWeb(doc, url) { if (doc.evaluate(''//h2[@class="r"]/a[@class="l"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else { return "newspaperArticle"; } } ', 'function regexMeta(str, item) { var re = /NAME\=\"([\w\W]*?)\"\s+CONTENT\=\"([\w\W]*?)\"/; var stuff = str.match(re); if (stuff) { if (stuff[1] == "PAGEHEAD") { item.section = stuff[2].split(/\s+/)[0]; } if (stuff[1] == "ZONE") { item.place = stuff[2].split(/\s+/)[0]; } if (stuff[1] == "PAGENUMBER") { item.pages = stuff[2].split(/\s+/)[0]; } } } function doWeb(doc, url) { var arts = new Array(); if (detectWeb(doc, url) == "multiple") { var xpath = ''//h2[@class="r"]/a[@class="l"]''; var links = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null); var link; var items = new Object(); while (link = links.iterateNext()) { items[link.href] = link.textContent; } items = Zotero.selectItems(items); for (var i in items) { arts.push(i); } } else { arts = [url]; } for each (var art in arts) { Zotero.debug(art); Zotero.Utilities.HTTP.doGet(art, function(text) { var newItem = new Zotero.Item("newspaperArticle"); newItem.publicationTitle = "The Hindu"; newItem.url = art; //title var t = /\<TITLE\>[\w\W]*\:([\w\W]*?)<\/TITLE/; newItem.title = Zotero.Utilities.unescapeHTML(Zotero.Utilities.capitalizeTitle(text.match(t)[1])); var ti = /\<FONT color\=black\>(.*)?\<\/FONT\>/; newItem.date = text.match(ti)[1]; var auth = /\<font class\=storyhead[\w\W]*?justify\>([\w\W]*?)\<p\>/; if (text.match(auth)) { //newItem.author=Zotero.Utilities.cleanAuthor(text.match(auth)[1]); cleanauth=Zotero.Utilities.cleanTags(text.match(auth)[1]); newItem.creators.push(Zotero.Utilities.cleanAuthor(cleanauth, "author")); } newItem.websiteTitle="The Hindu"; newItem.edition="Online"; //hooray for real meta tags! var meta = /<META NAME[\w\W]*?\>/g; var metaTags = text.match(meta); for (var i = 0 ; i <metaTags.length ; i++) { regexMeta(metaTags[i], newItem); } newItem.complete(); Zotero.done(); }); Zotero.wait(); } }'); REPLACE INTO translators VALUES ('e8d40f4b-c4c9-41ca-a59f-cf4deb3d3dc5', '1.0.0b4.r5', '', '2008-05-08 20:30:00', '0', '100', '4', 'Business Standard', 'Prashant Iyengar and Michael Berkowitz', 'http://www.business-standard.com', 'function detectWeb(doc, url) { if (url.match(/googlesearch/)) { return "multiple"; } else if (url.match(/common/)) { return "newspaperArticle"; } }', 'function doWeb(doc, url) { var arts = new Array(); if (detectWeb(doc, url) == "multiple") { var links = doc.evaluate(''//a[@class="NewsHead"]'', doc, null, XPathResult.ANY_TYPE, null); var link; var items = new Object(); while (link = links.iterateNext()) { items[link.href] = Zotero.Utilities.cleanTags(link.textContent); } items = Zotero.selectItems(items); for (var i in items) { arts.push(i); } } else { arts = [url]; } Zotero.Utilities.processDocuments(arts, function(doc) { var newItem = new Zotero.Item("newspaperArticle"); newItem.publicationTitle = "The Business Standard"; newItem.url = doc.location.href; newItem.websiteTitle="The Business Standard"; newItem.edition="Online"; newItem.title = Zotero.Utilities.cleanTags(doc.title); if (doc.evaluate(''//td[@class="author"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { var bits = doc.evaluate(''//td[@class="author"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent.split(/\s+\/\s+/); newItem.creators.push(Zotero.Utilities.cleanAuthor(bits[0], "author")); extras = Zotero.Utilities.trimInternal(bits[1]).match(/^(.*)(\s\w+\s+\d+,\s*\d+)$/); newItem.place = extras[1]; newItem.date = Zotero.Utilities.trimInternal(extras[2]); newItem.complete(); } else if (doc.evaluate(''//td[@class="NewsSummary"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { var author = Zotero.Utilities.trimInternal(doc.evaluate(''//td[@class="NewsSummary"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author")); var printurl = ''http://www.business-standard.com/general/printpage.php?autono='' + newItem.url.match(/autono=(\d+)/)[1]; Zotero.debug(printurl); Zotero.Utilities.HTTP.doGet(printurl, function(text) { var date = text.match(/<td class=author>([^<]+)</)[1]; newItem.date = Zotero.Utilities.trimInternal(date.split(" ")[1]); newItem.complete(); }); } }, function() {Zotero.done;}); Zotero.wait(); } '); REPLACE INTO translators VALUES ('fe39e97d-7397-4f3f-a5f3-396a1a79213c', '1.0.0b4.r5', '', '2008-05-08 20:30:00', '0', '100', '4', 'OpenJudis - Indian Supreme Court cases', 'Prashant Iyengar and Michael Berkowitz', 'http://(www.)?openarchive.in/(judis|newcases)', 'function detectWeb(doc, url) { if (doc.evaluate(''//div[@id="footer"]/dl/dt/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else if (url.match(/\d+\.htm/)) { return "case"; } }', 'function regexMeta(stuff, item) { if (stuff) { if (stuff[0] == "Origlink") { item.source = stuff[1].split(/\s+/)[0]; } if (stuff[0] == "Acts") { if (stuff[1].indexOf("|")!=-0) { echts=stuff[1].split(" | "); for (i=0;i<echts.length;i++) { item.tags.push(echts[i]); } } else { item.tags.push(stuff[1]); } } if (stuff[0] == "Citations" && stuff[1].length > 1) { item.reporter=stuff[1]; } if (stuff[0] == "Judges") { if (stuff[1].indexOf(";")!=-0) { jedges=stuff[1].split(" ; "); for (i=0;i<jedges.length;i++) { item.creators.push(Zotero.Utilities.cleanAuthor(jedges[i], "author")); } } else { item.creators.push(Zotero.Utilities.cleanAuthor(stuff[1], "author")); } } if (stuff[0] == "Jday") { item.dateDecided= stuff[1]; } } } function doWeb(doc, url) { var arts = new Array(); if (detectWeb(doc, url) == "multiple") { var items = Zotero.Utilities.getItemArray(doc, doc, "^http:\/\/openarchive\.in\/[^/]+\/[0-9]+.htm$"); items = Zotero.selectItems(items); for (var i in items) { arts.push(i); } } else { arts = [url]; } Zotero.debug(arts); for each (var art in arts) { var newurl = art; Zotero.Utilities.HTTP.doGet(art, function(text) { var newItem = new Zotero.Item("case"); newItem.publicationTitle = "OpenJudis - http://judis.openarchive.in"; newItem.url = url; //title var t = /\<title\>([\w\W]*?)<\/title/; newItem.title = Zotero.Utilities.trimInternal(t.exec(text)[1]); newItem.caseName = newItem.title; newItem.url = newurl; newItem.court="The Supreme Court of India"; newItem.websiteTitle="OpenJudis - http://judis.openarchive.in"; newItem.edition="Online"; var metareg = /<META NAME[^>]+\>/g; var tags = text.match(metareg); for each (var tag in tags) { var stuff = tag.match(/NAME=\"([^"]+)\"\s+CONTENT=\"([^"]+)\"/); regexMeta([stuff[1], stuff[2]], newItem); } pdfurl = ''http://judis.openarchive.in/makepdf.php?filename='' + newItem.url; newItem.attachments = [ {url:newItem.url, title:"OpenJudis Snapshot", mimeType:"text/html"}, {url:pdfurl, title:"OpenJudis PDF", mimeType:"application/pdf"} ]; newItem.complete(); }, function() {Zotero.done;}); Zotero.wait(); } } '); REPLACE INTO translators VALUES ('c0d7d260-d795-4782-9446-f6c403a7922c', '1.0.0b4.r5', '', '2008-05-08 20:30:00', '0', '100', '4', 'Science Links Japan', 'Michael Berkowitz', 'http://sciencelinks.jp/', 'function detectWeb(doc, url) { if (url.match(/result/) || url.match(/journal/)) { return "multiple"; } else if (url.match(/article/)) { return "journalArticle"; } }', 'function doWeb(doc, url) { var ns = doc.documentElement.namespaceURI; nsR = ns ? function(prefix) { if (prefix == ''x'') return ns; else return null; } : null; var arts = new Array(); if (detectWeb(doc, url) == "multiple") { var items = Zotero.Utilities.getItemArray(doc, doc, "(article|display\.php)"); items = Zotero.selectItems(items); for (var i in items) { arts.push(i); } } else { arts = [url]; } Zotero.Utilities.processDocuments(arts, function(doc) { var data = new Array(); var bits = doc.evaluate(''//div[@id="result_detail"]/table/tbody/tr/td'', doc, nsR, XPathResult.ANY_TYPE, null); var bit; while (bit = bits.iterateNext()) { data.push(Zotero.Utilities.trimInternal(bit.textContent)); } var item = new Zotero.Item("journalArticle"); for each (var datum in data) { if (datum.match(/^Title;/)) { item.title = Zotero.Utilities.capitalizeTitle(datum.match(/Title;(.*)$/)[1]); } else if (datum.match(/^Author;/)) { var auts = datum.match(/\b[A-Z''\-]+\s+[A-Z''\-]+/g); for each (var aut in auts) { item.creators.push(Zotero.Utilities.cleanAuthor(Zotero.Utilities.capitalizeTitle(aut, true), "author")); } } else if (datum.match(/^Journal Title;/)) { item.publicationTitle = datum.match(/;(.*)$/)[1]; } else if (datum.match(/^ISSN/)) { item.ISSN = datum.match(/[\d\-]+/)[0]; } else if (datum.match(/^VOL/)) { var voliss = datum.match(/^VOL\.([^;]*);NO\.([^;]*);PAGE\.([^(]*)\((\d+)\)/); item.volume = voliss[1]; item.issue = voliss[2]; item.pages = voliss[3]; item.date = voliss[4]; } else if (datum.match(/^Abstract/)) { item.abstractNote = datum.match(/;(.*)/)[1]; } } item.url = doc.location.href; item.attachments = [{url:item.url, title:"Science Links Japan Snapshot", mimeType:"text/html"}]; item.complete(); }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('2cd7d362-5fba-423a-887f-579ed343e751', '1.0.0b4.r5', '', '2008-05-06 08:15:00', '0', '100', '4', 'The Microfinance Gateway', 'Michael Berkowitz', 'http://(www.)?microfinancegateway.org/', 'function detectWeb(doc, url) { if (url.match(/results\.php/) || url.match(/search/)) { return "multiple"; } else if (url.match(/content\/article/)) { return "journalArticle"; } }', 'function doWeb(doc, url) { var ns = doc.documentElement.namespaceURI; var nsResolver = ns ? function (prefix) { if (prefix == ''x'') return ns; else return null; } : null; var arts = new Array(); if (detectWeb(doc, url) == "multiple") { var items = Zotero.Utilities.getItemArray(doc, doc, "content/article/detail"); items = Zotero.selectItems(items); for (var i in items) { arts.push(i); } } else { arts = [url]; } Zotero.Utilities.processDocuments(arts, function(doc) { var item = new Zotero.Item("journalArticle"); item.title = Zotero.Utilities.trimInternal(doc.evaluate(''//td[2][@class="main_content_box"]/h1'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent); var authors = Zotero.Utilities.trimInternal(doc.evaluate(''//div[@class="source"]/strong'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent).split(/(\.,|&)/); for each (var aut in authors) { if (aut.match(/\w+/)) { item.creators.push(Zotero.Utilities.cleanAuthor(Zotero.Utilities.trimInternal(aut), "author", true)); } } item.url = doc.location.href; item.date = Zotero.Utilities.trimInternal(doc.evaluate(''//span[@class="date"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent); item.abstractNote = Zotero.Utilities.trimInternal(doc.evaluate(''//span[@class="summary"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent); var pdfurl = doc.evaluate(''//div[@class="articleTopics"]/div/a[1]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().href; item.publicationTitle = doc.evaluate(''//div[@class="articleTopics"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.match(/Published\s+by:\s+(.*)\n/)[1]; item.attachments = [ {url:item.url, title:item.title + " Snapshot", mimeType:"text/html"}, {url:pdfurl, title:item.title + " PDF", mimeType:"application/pdf"} ]; item.complete(); }, function() {Zotero.done;}); }'); REPLACE INTO translators VALUES ('291934d5-36ec-4b81-ac9c-c5ad5313dba4', '1.0.0b4.r5', '', '2008-05-06 08:15:00', '0', '100', '4', 'Pion Journals', 'Michael Berkowitz', 'http://(www.)?(hthpweb|envplan|perceptionweb).com/', 'function detectWeb(doc, url) { if (url.match(/search\.cgi/) || url.match(/ranking/) || url.match(/volume=/)) { return "multiple"; } else if (url.match(/abstract\.cgi/)) { return "journalArticle"; } }', 'function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var arts = new Array(); if (detectWeb(doc, url) == "multiple") { var items = Zotero.Utilities.getItemArray(doc, doc, "abstract.cgi\\?id="); items = Zotero.selectItems(items); for (var i in items) { arts.push(i); } } else { arts = [url]; } Zotero.debug(arts); Zotero.Utilities.processDocuments(arts, function(doc) { var item = new Zotero.Item("journalArticle"); item.publicationTitle = Zotero.Utilities.trimInternal(doc.evaluate(''//div[@id="footer"]/div[@class="left"]/i'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent); item.title = Zotero.Utilities.trimInternal(doc.evaluate(''//div[@id="total"]/p[2]/font/b'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent); var authors = Zotero.Utilities.trimInternal(doc.evaluate(''//div[@id="total"]/p[3]/b'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent).split(/,\s*/); for each (var aut in authors) { item.creators.push(Zotero.Utilities.cleanAuthor(aut, "author")); } if (doc.evaluate(''//div[@id="title"]/div[@class="left"]/font'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.match(/\d+/)) { var voliss = doc.evaluate(''//div[@id="title"]/div[@class="left"]/font'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.match(/(\d+)\s+volume\s+(\d+)\s*\((\d+)\)\s+(pages\s+(.*))?$/); Zotero.debug(voliss); item.date = voliss[1]; item.volume = voliss[2]; item.issue = voliss[3]; if (voliss[5]) item.pages = voliss[5]; } else { item.date = Zotero.Utilities.trimInternal(doc.evaluate(''//div[@id="total"]/p[4]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent).match(/(\d+)$/)[1]; } item.DOI = Zotero.Utilities.trimInternal(doc.evaluate(''//div[@id="title"]/div[@class="right"]/font'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent).substr(4); if (doc.evaluate(''//a[contains(@href, ".pdf")]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) var pdfurl = doc.evaluate(''//a[contains(@href, ".pdf")]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().href; item.url = doc.location.href; var pub = item.publicationTitle; item.attachments = [{url:item.url, title:pub + " Snapshot", mimeType:"text/html"}]; if (pdfurl) item.attachments.push({url:pdfurl, title:pub + " Full Text PDF", mimeType:"application/pdf"}); item.abstractNote = Zotero.Utilities.trimInternal(doc.evaluate(''//div[@id="total"]/p[5]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent).substr(10); item.complete(); }, function() {Zotero.done;}); }'); REPLACE INTO translators VALUES ('2e304579-dd7b-4770-85e9-0d724c9b49a5', '1.0.0b4.r5', '', '2008-05-05 07:45:00', '0', '100', '4', 'European Educational Research Journal', 'Michael Berkowitz', 'http://www.wwwords.co.uk/eerj/', 'function detectWeb(doc, url) { if (doc.evaluate(''//div[@id="maincontent"]/table[*//p[@class="articletitle"]]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } }', 'function titleCase(str) { var skipWords = ["but", "or", "yet", "so", "for", "and", "nor", "a", "an", "the", "at", "by", "from", "in", "into", "of", "on", "to", "with", "up", "down", "as"]; var words = str.toLowerCase().split(/\s+/); var newstr = ""; for each (var word in words) { if (skipWords.indexOf(word.replace(/[^a-zA-Z]+/, "")) != -1) { newstr += " " + word; } else if (word.indexOf("-") != -1) { newword = word.split("-"); newstr += " " + newword[0][0].toUpperCase() + newword[0].substr(1) + "-" + newword[1][0].toUpperCase() + newword[1].substr(1); } else { newstr += " " + word[0].toUpperCase() + word.substr(1); } } return Zotero.Utilities.trimInternal(newstr); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return false; } : null; var items = new Object(); var titles = doc.evaluate(''//p[@class="articletitle"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var title; while (title = titles.iterateNext()) { var text = Zotero.Utilities.trimInternal(title.textContent); items[text] = text; } items = Zotero.selectItems(items); Zotero.debug(items); var articles = doc.evaluate(''//div[@id="maincontent"]/table[*//p[@class="articletitle"]]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var art; while (art = articles.iterateNext()) { var title = Zotero.Utilities.trimInternal(doc.evaluate(''.//p[@class="articletitle"]'', art, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent); if (items[title]) { var pdfurl = doc.evaluate(''.//a[contains(text(), "FULL TEXT")]'', art, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().href; var item = new Zotero.Item("journalArticle"); item.publicationTitle = "European Educational Research Journal"; item.ISSN = "1474-9041"; item.url = url; item.title = title; var voliss = doc.title.match(/\-\s+(.*)$/)[1]; voliss = voliss.match(/Volume\s+(\d+)\s+Issue\s+(\d+)\s+\((\d+)\)/); item.volume = voliss[1]; item.issue = voliss[2]; item.date = voliss[3]; var authors = doc.evaluate(''.//tr[2]/td'', art, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; var ibits = doc.evaluate(''.//tr[2]/td//i'', art, nsResolver, XPathResult.ANY_TYPE, null); var ibit = ""; var bit; while (bit = ibits.iterateNext()) { authors = authors.replace(bit.textContent, ","); } authors = authors.split(/\s*(,|&)\s*/); for each (var aut in authors) { if (aut.match(/\w/)) { aut = titleCase(Zotero.Utilities.trimInternal(aut)); item.creators.push(Zotero.Utilities.cleanAuthor(aut, "author")); } } item.attachments = [{url:pdfurl, title:"EERJ Full Text PDF", mimeType:"application/pdf"}]; item.complete(); } } }'); REPLACE INTO translators VALUES ('bdaac15c-b0ee-453f-9f1d-f35d00c7a994', '1.0.0b4.r5', '', '2008-05-05 07:45:00', '0', '100', '4', 'AMS Journals', 'Michael Berkowitz', 'http://www.ams.org/', 'function detectWeb(doc, url) { if (url.match(/jour(nals|search)/)) { return "multiple"; } else if (url.match(/\d{4}\-\d{2}\-\d{2}/)) { return "journalArticle"; } }', 'function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); if (url.match(/joursearch/)) { var titlex = ''//table/tbody/tr/td/span[@class="searchResultsArticleTitle"]''; var linkx = ''//table/tbody/tr[td/span[@class="searchResultsArticleTitle"]]//a[contains(text(), "Abstract")]''; } else { var titlex = ''//div[@class="contentList"]/dl/dt[@class="articleTitleInAbstract"]''; var linkx = ''//div[@class="contentList"]/dl/dd/a[contains(text(), "Abstract")]'' } var titles = doc.evaluate(titlex, doc, nsResolver, XPathResult.ANY_TYPE, null); var links = doc.evaluate(linkx, doc, nsResolver, XPathResult.ANY_TYPE, null); var title, link; while ((title = titles.iterateNext()) && (link = links.iterateNext())) { items[link.href] = Zotero.Utilities.trimInternal(title.textContent); } items = Zotero.selectItems(items); for (var i in items) { articles.push(decodeURIComponent(i)); } } else { articles = [url]; } Zotero.debug(articles); Zotero.Utilities.processDocuments(articles, function(doc) { var item = new Zotero.Item("journalArticle"); item.publicationTitle = doc.title; item.ISSN = doc.evaluate(''//span[@class="journalISSN"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.match(/\(e\)\s+ISSN:?\s+(.*)\(p\)/)[1]; item.title = Zotero.Utilities.trimInternal(doc.evaluate(''//p[@class="articleTitle"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent); var data = Zotero.Utilities.trimInternal(doc.evaluate(''//p[span[@class="bibDataTag"]][1]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent); data = data.replace(/(Journal|MSC|Posted|Retrieve)/g, "\n$1"); Zotero.debug(data); var authors = data.match(/Author\(s\):\s+(.*)\n/)[1].split(/;\s+/); for each (var aut in authors) { item.creators.push(Zotero.Utilities.cleanAuthor(aut, "author")); } var journalinfo = data.match(/Journal:\s+(.*)\n/)[1].match(/^([^\d]+)(\d+)\s+\((\d+)\),\s+(.*)$/); item.journalAbbreviation = journalinfo[1]; item.volume = journalinfo[2]; item.pages = journalinfo[4]; item.date = Zotero.Utilities.trimInternal(data.match(/Posted:\s+(.*)\n/)[1]); item.url = doc.location.href; item.issue = item.url.match(/(\d+)\/S/)[1]; var pdfurl = item.url.replace(/([^/]+)\/home.html$/, "$1/$1.pdf"); item.attachments = [ {url:item.url, title:item.journalAbbreviation + " Snapshot", mimeType:"text/html"}, {url:pdfurl, title:item.journalAbbreviation + " PDF", mimeType:"application/pdf"} ]; item.abstract = Zotero.Utilities.trimInternal(doc.evaluate(''//td[@class="bottomCell"]/p[4]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.substr(10)); item.complete(); }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('5278b20c-7c2c-4599-a785-12198ea648bf', '1.0.0b4.r5', '', '2009-02-08 22:10:00', 1, 100, 4, 'ARTstor', 'Ameer Ahmed and Michael Berkowitz', 'http://[^/]artstor.org[^/]*', 'function detectWeb(doc, url) { if (url.match(/(S|s)earch/) && (doc.evaluate(''//div[@id="thumbContentWrap"]/div'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent.match(/\w+/))) return "multiple" }', 'function doWeb(doc, url) { if (url.indexOf("|")!=-1){ scrape(doc, url); } } function scrape(doc, url){ var savedItems = new Array(); var saved = 0; var urlstub = url.substring(url.indexOf(''.org/'')+5,url.length); urlstub = url.substring(0,url.indexOf(''.org/'')+5) + urlstub.substring(0, urlstub.indexOf(''/'')+1) var suburl = url.substring(url.indexOf(''|'')+1, url.length); var groupname = suburl.substring(0, suburl.indexOf("|")); var searchterm = ''//*[@id="thumbSubTitle"]''; var stt = doc.evaluate(searchterm, doc, null, XPathResult.ANY_TYPE, null).iterateNext(); var st = stt.firstChild.nodeValue; var pageNn = ''//*[@id="pageNo"]''; var stt = doc.evaluate(pageNn, doc, null, XPathResult.ANY_TYPE, null).iterateNext(); var pg; if (stt.value==1){ pg = 1; } else if (stt.value==2){ pg = 25; } else { pg = ((stt.value-1) * 24) + 1; } var groupid; //check if user is on search page if not construct the query using the 2nd pattern if (groupname.indexOf("search")!=-1){ groupid = "1/" + pg + "/24/0?tn=1&name=&id=all&kw=" +st + "&type=1"; }else { groupid = suburl.substring(suburl.indexOf(''|'')+1, suburl.indexOf(''||'')) + "//thumbnails/" + pg + "/24/0"; } // Initial query to get results from the service - primary purpose is to get objectids. which in turn are required for the 2nd service call, which exposes the actual metadata Zotero.Utilities.HTTP.doGet(urlstub + "secure/" + groupname + "//" + groupid, function(text) { var json = JSON.parse(text); items = new Object(); for(var i=0; i<json.thumbnails.length; i++) { child = json.thumbnails[i]; var tmpUrl = urlstub + "secure/metadata/" + child.objectId + "?_method=Infolder"; //here we are saving the url service call to get each objects metadata savedItems[saved] = tmpUrl; items[tmpUrl]=child.objectId; saved++; } // GET VALUES FROM THE WEB var xpath = ''//div[@id="thumbContentWrap"]''; var elmts = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext(); var webitems = new Object(); var selectedNums = new Array(); var si=0; var c = elmts.getElementsByTagName(''*''); var title = ""; for(var i=0; i<c.length; i++) { var child = c[i]; if (child.id.indexOf("_imageHolder")!=-1){ var csss = child.style; var glow = csss.getPropertyValue(''border''); } if (child.id.indexOf("_thumb1")!=-1){ title = child.title; } if (child.id.indexOf("_thumb2")!=-1){ title+= " :: " + child.title; } if (child.id.indexOf("_thumb3")!=-1){ var childtitle = child.title; var dialogTitle = title; if (childtitle.length>1) { dialogTitle+=" " + childtitle; } var sitem = child.id.substring(6,child.id.indexOf("_")); webitems[sitem-1] = dialogTitle; if (glow.indexOf(75)!=-1){ selectedNums[si]=sitem-1; si++; } title = null; } } // GET VALUES FROM THE WEB var tcount=0; var newitems = null; if (selectedNums.length>0){ newitems = new Object(); for (j=0; j<selectedNums.length;j++){ var numnum = selectedNums[j]; for (var x in items){ if (numnum==tcount){ newitems[x] = webitems[tcount]; tcount=0; break; } else { tcount++; } } } } else { tcount = 0; for (var x in items){ items[x] = webitems[tcount]; tcount++; } } if (newitems!=null){ items = newitems; } //show dialogbox var items = Zotero.selectItems(items); if(!items) { return true; } var urls = new Array(); for(var i in items) { urls.push(i); } //this gets called when an object is selected in the dialog box, fires off a get on the service url Zotero.Utilities.HTTP.doGet(urls, function(text) { json = eval("(" + text + ")"); var newArticle = new Zotero.Item(''artwork''); for (var i=0; i<json.metaData.length; i++) { child = json.metaData[i]; // MISSING CULTURE!!! if (child.fieldName.indexOf("Title")!=-1){ if (newArticle.title!=null){ newArticle.title+= ";" + child.fieldValue; } else { newArticle.title = child.fieldValue; } } if (child.fieldName.indexOf("Creator")!=-1){ if (child.fieldValue != "") { if (child.fieldValue.match(/,/)) { var aut = child.fieldValue.match(/^([^,]+),\s+(.*)$/); if (aut[1].match(/\s/)) { newArticle.notes.push({note:"Artist information: " + aut[2]}); newArticle.creators.push(Zotero.Utilities.cleanAuthor(aut[1], "artist")); } else { var extras = aut[2].match(/^([^,]+),\s+(.*)$/); newArticle.creators.push({firstName:extras[1], lastName:aut[1], creatorType:"author"}); newArticle.notes.push({note:"Artist information: " + extras[2]}); } } else { newArticle.creators.push(Zotero.Utilities.cleanAuthor(child.fieldValue, "artist")); } } } if (child.fieldName.indexOf("Culture")!=-1){ newArticle.creators.push(Zotero.Utilities.cleanAuthor(child.fieldValue, "producer", true)); } if (child.fieldName.indexOf("Rights")!=-1){ if (newArticle.rights!=null){ newArticle.rights+= ";" + child.fieldValue.replace(/<wbr\/>/g, ""); } else { newArticle.rights = child.fieldValue.replace(/<wbr\/>/g, ""); } } if (child.fieldName.indexOf("Subject")!=-1){ newArticle.tags.push(Zotero.Utilities.trimInternal(child.fieldValue)); } if (child.fieldName.indexOf("Location")!=-1){ newArticle.tags.push(Zotero.Utilities.trimInternal(child.fieldValue)); } if (child.fieldName.indexOf("Style Period")!=-1){ newArticle.tags.push(Zotero.Utilities.trimInternal(child.fieldValue)); } if (child.fieldName.indexOf("Work Type")!=-1){ newArticle.tags.push(Zotero.Utilities.trimInternal(child.fieldValue)); } if (child.fieldName.indexOf("Material")!=-1 || child.fieldName.indexOf("Technique")!=-1 ){ if (newArticle.artworkMedium!=null){ newArticle.artworkMedium+= ";" + Zotero.Utilities.trimInternal(child.fieldValue); } else { newArticle.artworkMedium = Zotero.Utilities.trimInternal(child.fieldValue); } } if (child.fieldName.indexOf("Measurements")!=-1){ if (newArticle.artworkSize!=null){ newArticle.artworkSize+= ";" + Zotero.Utilities.trimInternal(child.fieldValue); } else { newArticle.artworkSize = Zotero.Utilities.trimInternal(child.fieldValue); } } if (child.fieldName.indexOf("Date")!=-1){ if (newArticle.date!=null){ newArticle.date+= ";" + Zotero.Utilities.trimInternal(child.fieldValue); } else { //bug here!! when date parser fails, entire object is not saved in Zotero - works in Scaffold, fails in Zotero! to patch remove all occurrences of B.C newArticle.date = Zotero.Utilities.trimInternal(child.fieldValue.replace(/B.C./i, "")); } } if (child.fieldName.indexOf("Repository")!=-1){ if (newArticle.repository!=null){ newArticle.repository+= ";" + Zotero.Utilities.trimInternal(child.fieldValue); } else { newArticle.repository = Zotero.Utilities.trimInternal(child.fieldValue); } } if (child.fieldName.indexOf("Source")!=-1){ if (newArticle.archiveLocation!=null){ newArticle.archiveLocation+= ";" + Zotero.Utilities.trimInternal(child.fieldValue); } else { newArticle.archiveLocation = Zotero.Utilities.trimInternal(child.fieldValue); } } if (child.fieldName.indexOf("Description")!=-1){ if (newArticle.abstractNote!=null){ newArticle.abstractNote+= ";" + Zotero.Utilities.trimInternal(child.fieldValue); } else { newArticle.abstractNote = Zotero.Utilities.trimInternal(child.fieldValue); } } if (child.fieldName.indexOf("Collection")!=-1){ if (newArticle.extra!=null){ newArticle.extra+= ";" + Zotero.Utilities.trimInternal(child.fieldValue); } else { newArticle.extra = Zotero.Utilities.trimInternal(child.fieldValue); } } } var objectId = json.objectId; //this is called to get the url stub for the ARTstor viewer Zotero.Utilities.HTTP.doGet(urlstub + "secure/metadata/" + objectId + "?_method=FpHtml", function(dom) { var testurl = dom.substring(dom.lastIndexOf(''<td class="data">'')+21,dom.lastIndexOf(''</td>'')); var t2 = "http://www.artstor.org"; var tmp2 = testurl.replace(/<wbr\/>/g, ""); tmp2 = tmp2.substring(0, tmp2.indexOf("&userId")); //build ARTstorImageURL artstorimgurl = t2+tmp2; newArticle.url = artstorimgurl; newArticle.callNumber = objectId; newArticle.complete(); Zotero.done(); }); Zotero.wait(); }); Zotero.wait(); }); Zotero.wait(); }'); REPLACE INTO translators VALUES ('79f6f9ed-537a-4d4f-8270-c4fbaafdf327', '1.0.0b4.r5', '', '2008-05-05 07:45:00', '0', '100', '4', 'Emerald Publishing', 'Michael Berkowitz', 'www.emeraldinsight.com/', 'function detectWeb(doc, url) { if (url.match(''searchQuickOptions.do'')) { return "multiple" } else if (url.match(''viewContentItem'')) { return "journalArticle"; } }', 'var tags = { journal:"publicationTitle", year:"date", volume:"volume", issue:"issue", page:"pages", doi:"DOI", // publisher:"repository", ''article url'':"url", abstract:"abstractNote" } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var arts = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var links = doc.evaluate(''//td[3][@class="resultTd"]/a[1]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var link; while (link = links.iterateNext()) { items[link.href] = link.textContent; } items = Zotero.selectItems(items); for (var i in items) { arts.push(i); } } else { arts = [url]; } Zotero.Utilities.processDocuments(arts, function(doc) { var item = new Zotero.Item("journalArticle"); item.title = Zotero.Utilities.trimInternal(doc.title.split(''-'')[1]); var data = new Object(); var values = doc.evaluate(''//div[@class="browseBoxGreen"]/div[@class="toc"]/p[@class="inline"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var fields = doc.evaluate(''//div[@class="browseBoxGreen"]/div[@class="toc"]/h3'', doc, nsResolver, XPathResult.ANY_TYPE, null); var value; var field; while ((field = fields.iterateNext()) && (value = values.iterateNext())) { data[Zotero.Utilities.trimInternal(field.textContent.toLowerCase()).replace('':'', '''')] = value.textContent; } var values = doc.evaluate(''//div[@id="centerLeft"]/p[@class="inline"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var fields = doc.evaluate(''//div[@id="centerLeft"]/h3[@class="inline"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); while ((field = fields.iterateNext()) && (value = values.iterateNext())) { data[Zotero.Utilities.trimInternal(field.textContent.toLowerCase()).replace('':'', '''')] = value.textContent; } for (var tag in data) { if (tags[tag]) item[tags[tag]] = Zotero.Utilities.trimInternal(data[tag]); } item.attachments = [{url:item.url, title:"Emerald Insight Snapshot", mimeType:"text/html"}]; item.tags = Zotero.Utilities.trimInternal(data[''keywords'']).split(/,\s+/); var authors = data[''author(s)''].split(/,\s+/); for each (var aut in authors) { item.creators.push(Zotero.Utilities.cleanAuthor(aut, "author")); } item.complete(); }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('bc39e05b-141a-4322-85f0-a5b86edf896b', '1.0.0b4.r5', '', '2008-05-05 07:45:00', '0', '100', '4', 'Hindawi Publishing Corporation', 'Michael Berkowitz', 'http://www.hindawi.com/', 'function detectWeb(doc, url) { if (url.match(''GetArticle.aspx'')) { return "journalArticle"; } else if (Zotero.Utilities.getItemArray(doc, doc, ''GetArticle.aspx'').length != 0) { return "multiple"; } }', 'function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var arts = new Array(); if (detectWeb(doc, url) == "multiple") { var items = Zotero.Utilities.getItemArray(doc, doc, ''GetArticle.aspx''); items = Zotero.selectItems(items); for (var i in items) { arts.push(i); } } else { arts = [url]; } Zotero.Utilities.processDocuments(arts, function(doc) { var item = new Zotero.Item("journalArticle"); item.title = doc.title; item.url = doc.location.href; var authorsx = doc.evaluate(''//span/h1/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var aut; var authors = new Array(); while (aut = authorsx.iterateNext()) { var author = aut.textContent; item.creators.push(Zotero.Utilities.cleanAuthor(author, "author")); } item.doi = item.url.match(/doi=(.*)/)[1]; var voliss = doc.evaluate(''//span/pre'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.toLowerCase(); if (voliss.match(/volume/)) item.volume = voliss.match(/volume\s+(\d+)/)[1]; if (voliss.match(/\(\d+\)/)) item.date = voliss.match(/\((\d+)\)/)[1]; if (voliss.match(/issue/)) item.issue = voliss.match(/issue\s+(\d+)/)[1]; if (voliss.match(/pages\s+\d+/)) item.pages = voliss.match(/pages\s+([\d\-]+)/)[1]; if (voliss.match(/article id/)) item.extra = ''Article ID '' + voliss.match(/article id\s+(\d+)/)[1]; var abss = doc.evaluate(''//span/p'', doc, nsResolver, XPathResult.ANY_TYPE, null); var absbit; var abs = ""; while (absbit = abss.iterateNext()) { abs += absbit.textContent; } abs = Zotero.Utilities.trimInternal(abs); item.abstractNote = abs; item.publicationTitle = doc.evaluate(''//img[@id="ctl00_ImgTitle"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().alt; item.attachments = [ {url:item.url, title:item.publicationTitle + " Snapshot", mimeType:"text/html"}, {url:item.url.replace(''GetArticle'', ''Getpdf''), title:item.publicationTitle + " PDF", mimeType:"application/pdf"} ]; item.complete(); }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('252c6a50-0900-41c5-a66b-ec456137c43c', '1.0.0b4.r5', '', '2008-05-05 07:45:00', '0', '100', '4', 'AcademicJournals.net', 'Michael Berkowitz', 'http://www.academicjournals.net/', 'function detectWeb(doc, url) { if (url.match(''articleno='')) { return "journalArticle"; } else if (url.match(''issueno='') || url.match(''current.php'')) { return "multiple"; } }', 'function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return prefix; else return null; } : namespace; var arts = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var titles = doc.evaluate(''//tr[2]/td//table/tbody/tr[1]/td[2]/font'', doc, nsResolver, XPathResult.ANY_TYPE, null); var title; var links = doc.evaluate(''//tr[4]/td[2]/div/a[@class="links"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var link; while ((title = titles.iterateNext()) && (link = links.iterateNext())) { items[link.href] = Zotero.Utilities.trimInternal(title.textContent); } items = Zotero.selectItems(items); for (var i in items) { arts.push(i); } } else { arts = [url]; } Zotero.Utilities.processDocuments(arts, function(doc) { var item = new Zotero.Item("journalArticle"); item.url = doc.location.href; //title item.title = Zotero.Utilities.trimInternal(doc.evaluate(''//td[2]/table/tbody/tr/td/div/font'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent); //voliss, etc. var voliss = doc.evaluate(''//table/tbody/tr/td[2]/font/font'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; voliss = voliss.match(/^([^\d]+)(\d+)\s+\((\d+)\):\s+([\d\-]+),\s+(\d+)/); Zotero.debug(voliss); item.publicationTitle = voliss[1]; item.volume = voliss[2]; item.issue = voliss[3]; item.pages = voliss[4]; item.date = voliss[5]; //authors var authorsx = doc.evaluate(''//td[2]/font/a[@class="links"]/font'', doc, nsResolver, XPathResult.ANY_TYPE, null); var author; var authors = new Array(); while (author = authorsx.iterateNext()) { authors.push(author.textContent); } for each (var aut in authors) { item.creators.push(Zotero.Utilities.cleanAuthor(aut, "author")); } item.abstractNote = Zotero.Utilities.trimInternal(doc.evaluate(''//table/tbody/tr/td/div/table/tbody/tr/td[2]/div/font'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent); //attachments var pdfurl = doc.evaluate(''//a[contains(@href, ".pdf")]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().href; item.attachments = [ {url:item.url, title:"AcademicJournals.net Snapshot", mimeType:"text/html"}, {url:pdfurl, title:"AcademicJournals.net PDF", mimeType:"application/pdf"} ]; //tags var tagspath = doc.evaluate(''//tbody/tr/td/table/tbody/tr[2]/td/font/a[@class="links"]/font'', doc, nsResolver, XPathResult.ANY_TYPE, null); var tag; var tags = new Array(); while (tag = tagspath.iterateNext()) { tags.push(tag.textContent); } item.tags = tags; item.complete(); }, function() {Zotero.done;}); }'); REPLACE INTO translators VALUES ('1e1e35be-6264-45a0-ad2e-7212040eb984', '1.0.0b4.r5', '', '2008-06-23 16:45:00', '0', '100', '4', 'APA PsycNET', 'Michael Berkowitz', 'http://psycnet\.apa\.org/', 'function detectWeb(doc, url) { if (url.match(/search\.searchResults/)) { return "multiple"; } else if (url.match(/search\.displayRecord/)) { return "journalArticle"; } }', 'function associateXPath(xpath, doc, ns) { return Zotero.Utilities.trimInternal(doc.evaluate(xpath, doc, ns, XPathResult.ANY_TYPE, null).iterateNext().textContent); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var arts = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var titles = doc.evaluate(''//div[@class="srhcTitle"]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var title; while (title = titles.iterateNext()) { items[title.href] = title.textContent; } items = Zotero.selectItems(items); for (var i in items) { arts.push(i); } } else { arts = [url]; } Zotero.Utilities.processDocuments(arts, function(doc) { var newurl = doc.location.href; if (doc.evaluate(''//input[@name="id"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var id = doc.evaluate(''//input[@name="id"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().value; var lstSelectedUIDs = doc.evaluate(''//input[@name="lstUIDs"][@id="srhLstUIDs"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().value; var get = ''http://psycnet.apa.org/index.cfm?fa=search.export&id='' + id + ''&lstSelectedUIDs='' + lstSelectedUIDs + ''&lstUIDs=&records=selected&displayFormat=&exportFormat=referenceSoftware&printDoc=0''; Zotero.Utilities.HTTP.doGet(get, function(text) { var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { item.url = newurl; item.attachments = [{url:newurl, title:"APA PsycNET Snapshot", mimeType:"text/html"}]; item.complete(); }); translator.translate(); }); } else { var item = new Zotero.Item("journalArticle"); item.title = associateXPath(''//div[@id="rdcTitle"]'', doc, nsResolver); var authors = associateXPath(''//div[@id="rdcAuthors"]'', doc, nsResolver).split(/;\s+/); for each (var aut in authors) { item.creators.push(Zotero.Utilities.cleanAuthor(aut, "author", true)); } var voliss = associateXPath(''//div[@id="rdcSource"]'', doc, nsResolver).match(/^([^\.]+)\.\s+(\d+\s+\w+)\s+Vol\s+(\d+)\((\d+)\)\s+(.*)$/); item.publicationTitle = voliss[1]; item.date = voliss[2]; item.volume = voliss[3]; item.issue = voliss[4]; item.pages = voliss[5]; item.abstractNote = associateXPath(''//div[@id="rdRecord"]/div[@class="rdRecordSection"][2]'', doc, nsResolver); item.complete(); } }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('8082115d-5bc6-4517-a4e8-abed1b2a784a', '1.0.0b4.r5', '', '2008-06-29 21:10:00', '0', '100', '4', 'Copernicus2', 'Michael Berkowitz', 'http://www.(adv-sci-res|astrophys-space-sci-trans|atmos-chem-phys|biogeosciences(-discuss)?|clim-past|electronic-earth|hydrol-earth-syst-sci|nat-hazards-earth-syst-sci|nonlin-processes-geophys|ocean-sci|soc-geogr|surv-perspect-integr-environ-soc|the-cryosphere).net/', 'function detectWeb(doc, url) { if (doc.evaluate(''//div[@id="publisher"]/iframe'', doc, null, XPathResult.ANY_TYPE, null).iterateNext() || doc.evaluate(''//td[*[a[contains(text(), "Abstract")]]]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else if (doc.title.match(/Abstract/)) { return "journalArticle"; } }', 'function getRIS(link) { Zotero.Utilities.HTTP.doGet(link, function(text) { var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { item.repository = "Copernicus Online Journals"; item.attachments[0].title = item.publicationTitle + " Snapshot"; item.attachments[0].mimeType = "text/html"; item.attachments[1].title = item.publicationTitle + " PDF"; item.complete(); }); translator.translate(); }); } function doWeb(doc, url) { var arts = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); if (doc.evaluate(''//div[@id="publisher"]/iframe'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { var link = doc.evaluate(''//div[@id="publisher"]/iframe'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().src; Zotero.Utilities.HTTP.doGet(link, function(text) { var links = text.match(/<a\s+target=\"_top\"\s+href=\"[^"]+\">[^<]+/g); for each (var link in links) { link = link.match(/href=\"([^"]+)\">(.*)/); items[link[1].replace(/\.[^\.]+$/, ".ris")] = Zotero.Utilities.trimInternal(link[2]) + "..."; } items = Zotero.selectItems(items); for (var i in items) { getRIS(i); } }); } else { var titles = doc.evaluate(''//td[*[a[contains(text(), "Abstract")]]]/span[@class="pb_toc_article_title"]'', doc, null, XPathResult.ANY_TYPE, null); var links = doc.evaluate(''//td[*[a[contains(text(), "Abstract")]]]//a[1]'', doc, null, XPathResult.ANY_TYPE, null); var title; var link; while ((title = titles.iterateNext()) && (link = links.iterateNext())) { items[link.href] = title.textContent; } items = Zotero.selectItems(items); for (var i in items) { getRIS(i.replace(".html", ".ris")); } } } else { getRIS(url.replace(''.html'', ''.ris'')); } Zotero.wait(); }'); REPLACE INTO translators VALUES ('a8df3cb0-f76c-4e2c-a11e-5fa283f8010c', '1.0.0b4.r5', '', '2008-04-24 14:30:00', '0', '100', '4', 'Copernicus', 'Michael Berkowitz', 'http://www.(adv-geosci|adv-radio-sci|ann-geophys).net/', 'function detectWeb(doc, url) { if (doc.evaluate(''//iframe'', doc, null, XPathResult.ANY_TYPE, null).iterateNext() || doc.evaluate(''//li[a[contains(text(), "Abstract")]]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else if (doc.title.match(/Abstract/)) { return "journalArticle"; } }', 'function scrape(doc) { var item = new Zotero.Item("journalArticle"); item.url = doc.location.href; item.title = doc.evaluate(''//span[@class="inhaltueber_16f"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent; item.publicationTitle = doc.evaluate(''//span[@class="ueberschrift"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent.split(/\n/)[0]; item.repository = item.publicationTitle; var authors = doc.evaluate(''//td/span[3]/b'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent; authors = authors.replace(/\d/g, "").replace(/,,/, ",").split(/(,|and)/); for each (var aut in authors) { if (!(aut == "and") && (aut.match(/\w/))) { aut = Zotero.Utilities.trimInternal(aut); names = aut.match(/(.*)\s([^\s]+)/); item.creators.push({firstName:names[1], lastName:names[2], creatorType:"author"}); } } var voliss = doc.evaluate(''//tr[3]/td/span[@class="lib_small"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent; voliss = voliss.match(/^([^,]+),([^,]+),([^,]+),([^w]+)/); item.journalAbbreviation = voliss[1]; item.volume = Zotero.Utilities.trimInternal(voliss[2]); item.pages = Zotero.Utilities.trimInternal(voliss[3]); item.year = Zotero.Utilities.trimInternal(voliss[4]); item.abstractNote = Zotero.Utilities.trimInternal(doc.evaluate(''//tr[3]/td/span[4]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent.substr(10)); item.attachments = [ {url:item.url, title:item.publicationTitle + " Snapshot", mimeType:"text/html"}, {url:item.url.replace(".html", ".pdf"), title:item.publicationTitle + " PDF", mimeType:"application/pdf"} ]; item.complete(); } function doWeb(doc, url) { var arts = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); if (doc.evaluate(''//iframe'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { var link = doc.evaluate(''//iframe'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().src; Zotero.Utilities.HTTP.doGet(link, function(text) { var links = text.match(/<a\s+target=\"_top\"\s+href=\"[^"]+\">[^<]+/g); for each (var link in links) { link = link.match(/href=\"([^"]+)\">(.*)/); items[link[1].replace(/\.[^\.]+$/, ".html")] = Zotero.Utilities.trimInternal(link[2]) + "..."; } items = Zotero.selectItems(items); for (var i in items) { arts.push(i); } Zotero.Utilities.processDocuments(arts, function(doc) { scrape(doc); }, function() {Zotero.done;}); }); } else { var titles = doc.evaluate(''//li[a[contains(text(), "Abstract")]]/span[@class="articletitle"]'', doc, null, XPathResult.ANY_TYPE, null); var links = doc.evaluate(''//li[a[contains(text(), "Abstract")]]/a[1]'', doc, null, XPathResult.ANY_TYPE, null); var title; var link; while ((title = titles.iterateNext()) && (link = links.iterateNext())) { items[link.href] = title.textContent; } items = Zotero.selectItems(items); for (var i in items) { arts.push(i); } Zotero.Utilities.processDocuments(arts, function(doc) { scrape(doc);}, function() {Zotero.done;}); } } else { Zotero.Utilities.processDocuments([url], function(doc) { scrape(doc); }, function() {Zotero.done;}); } Zotero.wait(); }'); REPLACE INTO translators VALUES ('f203db7f-7b7b-4dc4-b018-115b7885fe3b', '1.0.0b4.r5', '', '2008-07-10 06:15:00', '0', '100', '4', 'Oxford Music and Art Online', 'Michael Berkowitz', 'http://[^/]*www.oxford(music|art)online.com[^/]*/', 'function detectWeb(doc, url) { if (url.match(/search_results/)) { return "multiple"; } else if (url.match(/\/article\//)) { return "journalArticle"; } }', 'function doWeb(doc, url) { var host = doc.location.host; var site = host.match(/oxford(.*)online/)[1]; var ids = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var links = doc.evaluate(''//ul[@class="search_result_list"]/li/p/a'', doc, null, XPathResult.ANY_TYPE, null); var link; while (link = links.iterateNext()) { items[link.href] = link.textContent; } items = Zotero.selectItems(items); for (var i in items) { ids.push(i.match(/(music|art)\/([^?]+)/)[2]); } } else { ids = [url.match(/(music|art)\/([^?]+)/)[2]]; } Zotero.debug(ids); for each (var id in ids) { var get = ''http://'' + host + ''/subscriber/article_export_citation/grove/'' + site + ''/'' + id; Zotero.Utilities.HTTP.doGet(get, function(text) { var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { var authors = new Array(); for (var i in item.creators) { names = item.creators[i].lastName.match(/(.*)\s([^\s]+)$/); authors.push({firstName:names[1], lastName:names[2], creatorType:"author"}); } item.creators = authors; item.complete(); }); translator.translate(); }); } }'); REPLACE INTO translators VALUES ('ea531652-cdeb-4ec2-940e-627d4b107263', '1.0.0b4.r1', '', '2008-07-10 06:15:00', '0', '100', '4', 'AlterNet', 'Jesse Johnson', '^http://(?:www\.)alternet.org', 'function detectWeb(doc, url) { // identifies articles according to the presence of an article ID // number in the URL var index = url.toString().indexOf(''.org/'') + 5; index += url.toString().substr(index).indexOf(''/''); if (index != -1) { // ordinary aritcle var id = url.toString().substr(index + 1, 5); Zotero.Utilities.cleanString(id); if (Number(id)) { return "magazineArticle"; } //columnist or blog article index += url.toString().substr(index + 1).indexOf(''/''); id = url.toString().substr(index + 2, 5); Zotero.Utilities.cleanString(id); if (Number(id) && url.toString().search(''blog'') == -1) { return "magazineArticle"; } else if (Number(id)) { return "blogPost"; } } return null; }', 'function scrape(doc, url, title) { var index = url.toString().indexOf(''.org/'') + 5; index += url.toString().substr(index).indexOf(''/''); if (index != -1) { // ordinary aritcle var id = url.toString().substr(index + 1, 5); Zotero.Utilities.cleanString(id); if (Number(id)) { var newItem = new Zotero.Item("magazineArticle"); } //columnist or blog article index += url.toString().substr(index + 1).indexOf(''/''); id = url.toString().substr(index + 2, 5); Zotero.Utilities.cleanString(id); if (Number(id) && url.toString().search(''blog'') == -1) { var newItem = new Zotero.Item("magazineArticle"); } else if (Number(id)) { var newItem = new Zotero.Item("blogPost"); } } newItem.url = url; newItem.title = title; if (newItem.itemType == "magazineArticle") { newItem.publicationTitle = "AlterNet"; newItem.repository = "alternet.org"; } else if (newItem.itemType == "blogPost") { newItem.websiteType = "AlterNet Blog"; } // general scraping variables var xpath; // author if (newItem.itemType == "magazineArticle") { xpath = ''//p[@class="storybyline"]//a[contains(@href,"author")]''; } else if (newItem.itemType == "blogPost") { xpath = ''//p[@class="storybyline"]//a[contains(@href,"bloggers")]''; } temp = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext(); if (temp) { var author = Zotero.Utilities.trimInternal(temp.textContent); if(author.substr(0, 3).toLowerCase() == "by ") { author = author.substr(3); } var authors = author.split(","); for each (var author in authors) { newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author")); } } // date if (newItem.itemType == "magazineArticle") { xpath = ''//p[@class="storybyline"]//a[contains(@href,"date")]''; temp = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext(); var date = Zotero.Utilities.strToDate(temp.textContent); } else if (newItem.itemType == "blogPost") { xpath = ''//p[@class="storybyline"]/b''; temp = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext(); var begin = temp.textContent.lastIndexOf(" on "); temp = temp.textContent.substr(begin + 4); var date = Zotero.Utilities.strToDate(temp.substr(0, temp.length - 1)); } if (date != null) { var strdate; date.month = date.month + 1; strdate = date.year + ''-''; if (date.month < 10) { strdate += ''0'' + date.month; } else { strdate += date.month; } if (date.day > 10) { strdate += ''-'' + date.day; } else { strdate += ''-0'' + date.day; } newItem.date = strdate; } // abstract xpath = ''//div[@class="teaser"]//div[contains(@class,"teaser")]''; temp = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext(); if (temp) { newItem.abstractNote = Zotero.Utilities.trimInternal(temp.textContent); } // article snapshot // grabs 5-digit article code from url and uses it to derive printable page url for use in article snapshot var index = url.toString().indexOf(''.org/'') + 5; index += url.toString().substr(index).indexOf(''/''); if (index != -1) { var printurl; // ordinary article var id = url.toString().substr(index + 1, 5); if (Number(id)) { printurl = "http://www.alternet.org/module/printversion/" + id; newItem.attachments.push({url:printurl, title:"AlterNet Article Snapshot", mimeType:"text/html"}); } // columnist article else { index += url.toString().substr(index + 1).indexOf(''/''); id = url.toString().substr(index + 2, 5); Zotero.Utilities.cleanString(id); if (Number(id)) { printurl = "http://www.alternet.org/module/printversion/" + id; if (newItem.itemType == "blogPost") { printurl += "/?type=blog"; } newItem.attachments.push({url:printurl, title:"AlterNet Article Snapshot", mimeType:"text/html"}); } } } newItem.complete(); } function doWeb(doc, url) { // ordinary and columnist articles var xpath = ''//p[@class="storyheadline"]''; var title; if (title = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { scrape(doc, url, title.textContent); } return null; }'); REPLACE INTO translators VALUES ('56ea09bc-57ee-4f50-976e-cf7cb1f6c6d8', '1.0.0b4.r5', '', '2008-04-23 09:45:00', '0', '100', '4', 'Royal Society Publishing', 'Michael Berkowitz', 'http://journals.royalsociety.org/', 'function detectWeb(doc, url) { if (doc.evaluate(''//div[@class="listItemName"]/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else if (doc.evaluate(''//div[contains(@id, "ExportDiv")]/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "journalArticle"; } }', 'function makeURL(str, type) { var m = str.match(/content\/([^/]+)/)[1]; if (type == "ris") { return "http://journals.royalsociety.org/export.mpx?code=" + m + "&mode=ris"; } else if (type == "pdf") { return "http://journals.royalsociety.org/content/" + m + "/fulltext.pdf"; } } function doWeb(doc, url) { var arts = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var links = doc.evaluate(''//div[@class="listItemName"]/a'', doc, null, XPathResult.ANY_TYPE, null); var link; while (link = links.iterateNext()) { items[link.href] = link.textContent; } items = Zotero.selectItems(items); for (var i in items) { arts.push(i); } } else { arts = [url]; } for each (var link in arts) { var newurl = makeURL(link, "ris"); var pdfurl = makeURL(link, "pdf"); Zotero.Utilities.HTTP.doGet(newurl, function(text) { Zotero.debug(text); var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { item.attachments = [ {url:link, title:"Royal Society Snapshot", mimeType:"text/html"}, {url:pdfurl, title:"Royal Society PDF", mimeType:"application/pdf"} ]; item.complete(); }); translator.translate(); }); } }'); REPLACE INTO translators VALUES ('0eeb2ac0-fbaf-4994-b98f-203d273eb9fa', '1.0.0b4.r5', '', '2008-05-05 07:45:00', '1', '100', '4', 'Inter-Research Science Center', 'Michael Berkowitz', 'http://www.int-res.com/', 'function detectWeb(doc, url) { if (doc.evaluate(''//div[@class="journal-index"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext() || doc.evaluate(''//div[@class="tx-indexedsearch-res"]//tr[1]/td[2]//a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else if (doc.evaluate(''//a[@class="citeexport"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "journalArticle"; } }', 'var journals = { meps:["Marine Ecology Progress Series", "Mar Ecol Prog Ser"], ab:["Aquatic Biology", "Aquat Biol"], ame:["Aquatic Microbial Ecology", "Aquat Microb Ecol"], dao:["Diseases of Aquatic Organisms", "Dis Aquat Org"], cr:["Climate Research", "Clim Res"], esr:["Endangered Species Research", "Endang Species Res"] }; function doWeb(doc, url) { var arts = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); if (doc.evaluate(''//div[@class="tx-indexedsearch-res"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { var titlesx = doc.evaluate(''//div[@class="tx-indexedsearch-res"]//tr[2]/td[2]'', doc, null, XPathResult.ANY_TYPE, null); var linksx = doc.evaluate(''//div[@class="tx-indexedsearch-res"]//tr[1]/td[2]//a'', doc, null, XPathResult.ANY_TYPE, null); var title; var link; while ((title = titlesx.iterateNext()) && (link = linksx.iterateNext())) { items[link.href] = Zotero.Utilities.trimInternal(title.textContent).match(/doi:\s+[^\s]+\s+(.*)$/)[1]; } } else { var stuff = doc.evaluate(''//div[@class="journal-index"]/*[a[contains(text(), "pdf format")]]'', doc, null, XPathResult.ANY_TYPE, null); var thing; var titles = ""; while (thing = stuff.iterateNext()) { titles += thing.textContent; } titles = titles.split(/\n/); Zotero.debug(titles); var names = new Array(); for (var i = 0; i < titles.length; i++) { if (((i-1)%2 == 0) && (titles[i].match(/\w+/))) { names.push(titles[i]); } } Zotero.debug(names); var links = doc.evaluate(''//div[@class="journal-index"]/*[a[contains(text(), "pdf format")]]/a[1]'', doc, null, XPathResult.ANY_TYPE, null); var link; while (link = links.iterateNext()) { items[link.href] = names.shift(); } } items = Zotero.selectItems(items); for (var i in items) { arts.push(i); } } else { arts = [url]; } Zotero.Utilities.processDocuments(arts, function(doc) { var item = new Zotero.Item("journalArticle"); item.title = Zotero.Utilities.trimInternal(doc.evaluate(''//div[@class="bb"]/h2'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); item.url = doc.location.href; var voliss = item.url.match(/v(\d+)\/(n(\d+)\/)?p([^/]+)\//); item.volume = voliss[1]; item.pages = voliss[4]; if (voliss[2]) item.issue = voliss[3]; var jour = item.url.match(/abstracts\/([^/]+)\//)[1]; item.publicationTitle = journals[jour][0]; item.journalAbbreviation = journals[jour][1]; item.abstractNote = Zotero.Utilities.trimInternal(doc.evaluate(''//p[@class="abstract_block"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); var authors = Zotero.Utilities.trimInternal(doc.evaluate(''//div[@class="bb"]/h3'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent).split(/,\s+/); for each (var aut in authors) { aut = aut.replace(/[^\w^\s^\.]/g, "").replace(/\d/g, ""); item.creators.push(Zotero.Utilities.cleanAuthor(aut, "author")); } item.date = doc.evaluate(''//div[@class="abs-footer"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent.match(/date:\s+(.*)P/)[1]; item.DOI = Zotero.Utilities.trimInternal(doc.evaluate(''//h1[@class="csc-firstHeader"]/span'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent).match(/doi:\s+(.*)/)[1]; var tags = doc.evaluate(''//div[@class="box"]/p/a'', doc, null, XPathResult.ANY_TYPE, null); var tag; while (tag = tags.iterateNext()) { item.tags.push(tag.textContent); } var pdfurl = doc.evaluate(''//a[contains(@href, ".pdf")]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().href; item.attachments = [ {url:item.url, title:item.publicationTitle + " Snapshot", mimeType:"text/html"}, {url:pdfurl, title:item.publicationTitle + " Full Text PDF", mimeType:"application/pdf"} ]; item.complete(); }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('70295509-4c29-460f-81a3-16d4ddbb93f6', '1.0.0b4.r5', '', '2008-04-23 09:45:00', '0', '100', '4', 'GSA Journals Online', 'Michael Berkowitz', 'http://www.gsajournals.org/', 'function detectWeb(doc, url) { if (url.indexOf("request=search") != -1 || url.indexOf("request=get-toc") != -1) { return "multiple"; } else if (url.indexOf("request=get-abstract") != -1 || url.indexOf("request=get-document") != -1) { return "journalArticle"; } }', 'function doWeb(doc, url) { var arts = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var results = doc.evaluate(''//*[@class="group"]'', doc, null, XPathResult.ANY_TYPE, null); var next; while (next = results.iterateNext()) { var title = Zotero.Utilities.trimInternal(doc.evaluate(''.//*[@class="title"]'', next, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); var link = doc.evaluate(''.//a[1]'', next, null, XPathResult.ANY_TYPE, null).iterateNext().href; items[link] = title; } items = Zotero.selectItems(items); for (var i in items) { arts.push(i.replace(/get\-(abstract|document)/, "cite-builder")); } } else { arts = [url.replace(/get\-(abstract|document)/, "cite-builder")]; } Zotero.Utilities.processDocuments(arts, function(doc) { var newurl = doc.evaluate(''//a[contains(@href, "refman")]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().href; var oldurl = doc.location.href; Zotero.Utilities.HTTP.doGet(newurl, function(text) { var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { item.url = oldurl; item.DOI = decodeURIComponent(item.url.match(/doi=([^&]+)/)[1]); var pdfurl = ''http://www.gsajournals.org/perlserv/?request=res-loc&uri=urn:ap:pdf:doi:'' + item.DOI; item.attachments = [ {url:item.url, title:"GSA Snapshot", mimeType:"text/html"}, {url:pdfurl, title:"GSA Full Text PDF", mimeType:"application/pdf"} ]; item.complete(); }); translator.translate(); }); }, function() {Zotero.done;}); }'); REPLACE INTO translators VALUES ('9d822257-2eec-4674-b6d0-2504f54c8890', '1.0.0b4.r5', '', '2008-04-18 08:55:00', '0', '100', '4', 'African Journals Online', 'Michael Berkowitz', 'http://www.ajol.info', 'function detectWeb(doc, url) { if (url.match(/viewarticle.php/)) { return "journalArticle"; } else if (url.match(/search.php/) || url.match(/viewissue.php/)) { return "multiple"; } }', 'function getID(str) { return str.match(/(&|\?)id=(\d+)&?/)[2]; } function doWeb(doc, url) { var articles = new Array(); if (detectWeb(doc, url) == "multiple") { if (url.match(/search.php/)) { var items = Zotero.Utilities.getItemArray(doc, doc, "viewarticle.php?"); } else if (url.match("viewissue.php")) { var items = new Object(); var titles = doc.evaluate(''//span[@class="toctitle"]'', doc, null, XPathResult.ANY_TYPE, null); var links = doc.evaluate(''//a[text() = "Abstract"]'', doc, null, XPathResult.ANY_TYPE, null); var title; var link; while ((title = titles.iterateNext()) && (link = links.iterateNext())) { items[link.href] = Zotero.Utilities.trimInternal(title.textContent); } } items = Zotero.selectItems(items); for (var i in items) { articles.push(getID(i)); } } else { articles = [getID(url)]; } Zotero.debug(articles); for each (var id in articles) { var getstr = ''http://www.ajol.info/rst/rst.php?op=capture_cite&id='' + id + ''&cite=refman''; Zotero.Utilities.HTTP.doGet(getstr, function(text) { // load translator for RIS var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { var pubinfo = item.publicationTitle.match(/(.*);([^;]+)$/); item.publicationTitle = pubinfo[1]; var voliss = pubinfo[2].toLowerCase(); if (voliss.match(/v/)) item.volume = voliss.match(/v(ol\.)?\s+(\d+)/)[2]; if (voliss.match(/n/)) item.issue = voliss.match(/n(o\.)?\s+(\d+)/)[2]; if (voliss.match(/p(age)?/)) item.pages = voliss.match(/\d+\-\d+/)[0]; item.date = voliss.match(/\(([^)]+)\)/)[1]; item.attachments[0].title = "African Journals Online Snapshot"; item.attachments[0].mimeType = "text/html"; item.complete(); }); translator.translate(); }); } }'); REPLACE INTO translators VALUES ('dedcae51-073c-48fb-85ce-2425e97f128d', '1.0.0b4.r5', '', '2008-04-18 08:55:00', '0', '100', '4', 'Archive Ouverte en Sciences de l''Information et de la Communication (AOSIC)', 'Michael Berkowitz', 'http://archivesic.ccsd.cnrs.fr/', 'function detectWeb(doc, url) { if (doc.title.toLowerCase().match("fulltext search")) { return "multiple"; } else if (url.match(/sic_\d+/)) { return "journalArticle"; } }', 'var metaTags = { "DC.relation":"url", "DC.date":"date", "DC.description":"abstractNote", "DC.creator":"creators", "DC.title":"title" } function doWeb(doc, url) { var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = Zotero.Utilities.getItemArray(doc, doc, /sic_\d+\/fr\//); items = Zotero.selectItems(items) for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, function(doc) { var xpath = ''//meta[@name]''; var data = new Object(); var metas = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null); var meta; while (meta = metas.iterateNext()) { if (data[meta.name]) { data[meta.name] = data[meta.name] + ";" + meta.content; } else { data[meta.name] = meta.content; } } Zotero.debug(data); var item = new Zotero.Item("journalArticle"); for (var tag in metaTags) { if (tag == "DC.creator") { var authors = data[''DC.creator''].split(";"); for each (var aut in authors) { aut = aut.replace(/^([^,]+),\s+(.*)$/, "$2 $1"); item.creators.push(Zotero.Utilities.cleanAuthor(aut, "author")); } } else { item[metaTags[tag]] = data[tag]; } } var pdfurl = doc.evaluate(''//a[contains(@href, ".pdf")]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().href.match(/url=([^&]+)&/)[1]; Zotero.debug(pdfurl); item.attachments = [ {url:item.url, title:"AOSIC Snapshot", mimeType:"text/html"}, {url:pdfurl, title:"AOSIC Full Text PDF", mimeType:"application/pdf"} ]; item.complete(); }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('4afb932d-9211-4c0b-a31c-cfa984d62b66', '1.0.0b4.r5', '', '2008-05-20 19:10:00', '1', '100', '4', 'OAIster', 'Michael Berkowitz', 'http://quod.lib.umich.edu/cgi/b/', 'function detectWeb(doc, url) { if (doc.title.indexOf("OAIster") != -1) { return "multiple"; } }', 'function doWeb(doc, url) { var items = new Array(); var titlex = ''/html/body/table/tbody/tr/td[2]/table/tbody/tr/td/table/tbody/tr[1]/td[4]/font''; var titles = doc.evaluate(titlex, doc, null, XPathResult.ANY_TYPE, null); var title; while (title = titles.iterateNext()) { items.push(Zotero.Utilities.trimInternal(title.textContent)); } items = Zotero.selectItems(items); titles = new Array(); for each (var title in items) { titles.push(title); } Zotero.debug(titles); var xpath = ''//table/tbody/tr/td/table/tbody//table/tbody[tr/td[4]]''; var arts = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null); var art; while (art = arts.iterateNext()) { var data = new Object(); var rows = doc.evaluate(''./tr[td[4]]'', art, null, XPathResult.ANY_TYPE, null); var row; while (row = rows.iterateNext()) { var tag = Zotero.Utilities.trimInternal(doc.evaluate(''./td[2]'', row, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); var value = Zotero.Utilities.trimInternal(doc.evaluate(''./td[4]'', row, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); if (tag == "Note") { if (!data[''Note'']) { data[tag] = Zotero.Utilities.unescapeHTML(value); } } else { data[tag] = Zotero.Utilities.unescapeHTML(value); } } var item = new Zotero.Item(); if (data[''Resource Type'']) { var itemType = data[''Resource Type'']; } else { var itemType = "journalArticle"; } if (itemType == "journalArticle" || itemType.match(/(A|a)rticle/) || itemType.match(/text/)) { item.itemType = "journalArticle"; } else if (itemType.match(/(T|t)hesis/)) { item.itemType = "thesis"; } else if (itemType == "image") { item.itemType = "artwork"; } item.title = data[''Title'']; if (data[''Author/Creator'']) { var authors = data[''Author/Creator''].split(/;/); for each (var aut in authors) { if (aut.match(/,/)) { aut = aut.split(/,\s+/); aut = aut[1] + " " + aut[0]; } item.creators.push(Zotero.Utilities.cleanAuthor(aut, "author")); } } item.date = data[''Year'']; //.match(/\d{4}\-\d{2}\-\d{2}/)[0]; item.url = data[''URL'']; if (data[''Note'']) item.abstractNote = Zotero.Utilities.trimInternal(data[''Note'']); if (data[''Subject'']) { var keys = data[''Subject''].split(/;/); for each (var kw in keys) { if (kw.match(/\w+/)) item.tags.push(kw); } } for (var i in titles) { if (item.title == titles[i]) item.complete(); } } }'); REPLACE INTO translators VALUES ('675306d2-fca9-466f-b33d-1e3cc1bfd091', '1.0.0b4.r5', '', '2008-04-18 08:55:00', '0', '100', '4', 'Universiteit van Amsterdam', 'Michael Berkowitz', 'http://opc.uva.nl:8080/', 'function detectWeb(doc, url) { if (doc.evaluate(''//td[3][@class="hit"]/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else if (doc.title.match("results/titledata")) { return "book"; } }', 'function scrape(item, langTags, data) { for (var tag in data) { tag = tag.toLowerCase(); if (langTags[tag] == "creators") { var authors = data[tag].split(","); for each (var aut in authors) { item.creators.push(Zotero.Utilities.cleanAuthor(Zotero.Utilities.trimInternal(aut), "author")); } } else if (langTags[tag] == "tags") { var kws = data[tag].split(/(,|;)/); for each (var key in kws) { if (key.match(/\w+/)) item.tags.push(Zotero.Utilities.trimInternal(key)); } } else if (langTags[tag] == "publisher") { var pub = data[tag].split(/\s*:\s*/); item.place = pub[0]; item.publisher = pub[1]; } else { item[langTags[tag]] = data[tag]; } } } var tagsEN = { "title":"title", "author(s)":"creators", "publisher":"publisher", "year":"date", "isbn":"ISBN", "subject headings":"tags", "subject heading person":"tags", "call number":"callNumber" } var tagsNE = { "titel":"title", "auteur(s)":"creators", "uitgever":"publisher", "jaar":"date", "isbn":"ISBN", "trefwoorden":"tags", "trefwoord persoon":"tags", "plaatsnummer":"callNumber" } function doWeb(doc, url) { var books = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var links = doc.evaluate(''//td[3][@class="hit"]/a'', doc, null, XPathResult.ANY_TYPE, null); var link; while (link = links.iterateNext()) { items[link.href] = Zotero.Utilities.trimInternal(link.textContent); } items = Zotero.selectItems(items); for (var i in items) { books.push(i); } } else { books = [url]; } Zotero.Utilities.processDocuments(books, function(newDoc) { var data = new Object(); var box = newDoc.evaluate(''//table/tbody/tr[1]/td[2]/table/tbody/tr'', newDoc, null, XPathResult.ANY_TYPE, null).iterateNext(); var tags = newDoc.evaluate(''//table/tbody/tr[1]/td[2]/table/tbody/tr/td[1]'', newDoc, null, XPathResult.ANY_TYPE, null); var values = newDoc.evaluate(''//table/tbody/tr[1]/td[2]/table/tbody/tr/td[2]'', newDoc, null, XPathResult.ANY_TYPE, null); var tag; var value; while ((tag = tags.iterateNext()) && (value = values.iterateNext())) { tag = Zotero.Utilities.trimInternal(tag.textContent).replace(/:/, "").toLowerCase(); if (tagsEN[tag] || tagsNE[tag]) { data[tag] = Zotero.Utilities.trimInternal(value.textContent); } } item = new Zotero.Item("book"); var lingTags = new Array(); if (data[''titel'']) { lingTags = tagsNE; } if (data[''title'']) { lingTags = tagsEN; } scrape(item, lingTags, data); item.complete(); }, function() {Zotero.done;}); }'); REPLACE INTO translators VALUES ('bbad0221-134b-495a-aa56-d77cfaa67ab5', '1.0.0b4.r5', '', '2008-04-16 04:45:00', '0', '100', '4', 'Digital Humanities Quarterly', 'Michael Berkowitz', 'http://www.digitalhumanities.org/(dhq)?', 'function detectWeb(doc, url) { if (doc.evaluate(''//div[@class="DHQarticle"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "journalArticle"; } else if (doc.evaluate(''//div[@id="mainContent"]/div/p'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } }', 'function scrape(doc, xpath, xdoc) { return Zotero.Utilities.trimInternal(doc.evaluate(xpath, xdoc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); } function doWeb(doc, url) { var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object; var arts = doc.evaluate(''//div[@id="mainContent"]/div/p/a'', doc, null, XPathResult.ANY_TYPE, null); var art; while (art = arts.iterateNext()) { items[art.href] = art.textContent; } items = Zotero.selectItems(items); for (var i in items) { articles.push(i) } } else { articles = [url]; } Zotero.debug(articles); Zotero.Utilities.processDocuments(articles, function(newDoc) { var item = new Zotero.Item("journalArticle"); item.url = newDoc.location.href; item.title = scrape(newDoc, ''//h1[@class="articleTitle"]'', newDoc); var voliss = scrape(newDoc, ''//div[@id="pubInfo"]'', newDoc); voliss = voliss.match(/(.*)Volume\s+(\d+)\s+Number\s+(\d+)/); item.date = voliss[1]; item.volume = voliss[2]; item.issue = voliss[3]; var authors = newDoc.evaluate(''//div[@class="author"]'', newDoc, null, XPathResult.ANY_TYPE, null); var aut; while (aut = authors.iterateNext()) { item.creators.push(Zotero.Utilities.cleanAuthor(scrape(newDoc, ''./a[1]'', aut), "author")); } item.attachments = [{url:item.url, title:"DHQ Snapshot", mimeType:"text/html"}]; item.complete(); }, function() {Zotero.done;}); }'); REPLACE INTO translators VALUES ('fb342bae-7727-483b-a871-c64c663c2fae', '1.0.0b4.r5', '', '2008-04-11 08:30:00', '0', '100', '4', 'BusinessWeek', 'Michael Berkowitz', 'http://(www\.)?businessweek.com', 'function detectWeb(doc, url) { if (doc.title == "BusinessWeek Search Results") { return "multiple"; } else if (doc.evaluate(''//meta[@name="headline"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "magazineArticle"; } }', 'function doWeb(doc, url) { var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var results = doc.evaluate(''//div[@class="result"]/h3[@class="story"]/a'', doc, null, XPathResult.ANY_TYPE, null); var result; var items = new Object(); while (result = results.iterateNext()) { items[result.href] = Zotero.Utilities.trimInternal(result.textContent); } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.debug(articles); Zotero.Utilities.processDocuments(articles, function(newDoc) { var metaTags = new Object(); var metas = newDoc.evaluate(''//meta'', newDoc, null, XPathResult.ANY_TYPE, null); var meta; while (meta = metas.iterateNext()) { metaTags[meta.name] = meta.content; } Zotero.debug(metaTags); var item = new Zotero.Item("magazineArticle"); item.title = metaTags[''headline'']; item.abstractNote = metaTags[''abstract'']; item.tags = metaTags[''keywords''].split(/\s*,\s*/); item.creators.push(Zotero.Utilities.cleanAuthor(metaTags[''author''], "author")); item.publicationTitle = "BusinessWeek: " + metaTags[''channel'']; item.url = newDoc.location.href; item.date = metaTags[''pub_date''].replace(/(\d{4})(\d{2})(\d{2})/, "$2/$3/$1"); item.complete(); }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('409c520b-0720-4011-8fce-70fcd9806493', '1.0.0b4.r5', '', '2008-04-09 00:45:00', '0', '100', '4', 'InderScience', 'Michael Berkowitz', 'http://www.inderscience.com/', 'function detectWeb(doc, url) { if (doc.evaluate(''/html/body/table/tbody/tr/td[2]/table[tbody/tr/td[3]][2]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext() || doc.evaluate(''//td[1][@class="textcontent"]/table/tbody/tr/td[2]/b/u/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else if (url.indexOf("rec_id") != -1) { return "journalArticle"; } }', 'function doWeb(doc, url) { if (detectWeb(doc, url) == "journalArticle") { scrape(url); } else if ((detectWeb(doc, url) == "multiple")) { if (doc.evaluate(''/html/body/table/tbody/tr/td[2]/table[tbody/tr/td[3]]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { var items = new Object(); var results = doc.evaluate(''/html/body/table/tbody/tr/td[2]/table[tbody/tr/td[3]]'', doc, null, XPathResult.ANY_TYPE, null); var result; while (result = results.iterateNext()) { var title = Zotero.Utilities.trimInternal(doc.evaluate(''.//tr[1]/td[3]'', result, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); var id = doc.evaluate(''.//tr[8]/td[2]/a[2]'', result, null, XPathResult.ANY_TYPE, null).iterateNext().href.match(/rec_id=([^&]+)/)[1]; items[id] = title; } items = Zotero.selectItems(items); for (var i in items) { scrape(''http://www.inderscience.com/search/index.php?action=record&rec_id='' + i); } } else { var arts = new Array(); var items = Zotero.Utilities.getItemArray(doc, doc, "&rec_id"); items = Zotero.selectItems(items); for (var i in items) { scrape(i); } } } Zotero.wait(); } function scrape(link) { Zotero.Utilities.loadDocument(link, function(newDoc) { var data = new Object(); var rows = newDoc.evaluate(''/html/body/table/tbody/tr/td[2]/table[tbody/tr/td[3]]//tr[td[3]]'', newDoc, null, XPathResult.ANY_TYPE, null); var row; while (row = rows.iterateNext()) { var tag = Zotero.Utilities.trimInternal(newDoc.evaluate(''./td[2]'', row, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); var value = Zotero.Utilities.trimInternal(newDoc.evaluate(''./td[3]'', row, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); data[tag] = value; } Zotero.debug(data); var item = new Zotero.Item("journalArticle"); item.title = data[''Title:'']; item.abstractNote = data[''Abstract:'']; item.url = newDoc.location.href; item.tags = data[''Keywords:''].substr(0, data[''Keywords:''].length - 1).split(/\s*;\s*/); item.DOI = data[''DOI:'']; item.attachments.push({url:item.url, title:item.title + ": InderScience Snapshot", mimeType:"text/html"}); var authors = data[''Author:''].split(/\s*,\s*/); for each (var author in authors) { item.creators.push(Zotero.Utilities.cleanAuthor(author, "author")); } var voliss = data[''Journal:''].match(/^([^\d]+)(\d+)\s*\-\s*Vol\.\s*(\d+)\s*,\s*No\.(.+)pp\.\s*(.*)$/); Zotero.debug(voliss); item.publicationTitle = voliss[1]; item.date = voliss[2]; item.volume = voliss[3]; item.issue = voliss[4]; item.pages = voliss[5]; item.complete(); }, function() {Zotero.done;}); }'); REPLACE INTO translators VALUES ('8381bf68-11fa-418c-8530-2e00284d3efd', '1.0.0b4.r5', '', '2008-04-09 00:45:00', '0', '100', '4', 'IRIS translator', 'Chad Mills and Michael Berkowitz', 'http://[^/]*www.iris.rutgers.edu[^/]*/', 'function detectWeb(doc, url) { if (doc.evaluate(''//tr/td[1][@class="searchsum"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else if (doc.evaluate(''//th[@class="viewmarctags"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "book"; } }', 'function scrape(doc) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var xpath = ''//div[@id="panel1"]//tr[th[@class="viewmarctags"]][td[@class="viewmarctags"]]''; var elmts = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var elmt = elmts.iterateNext(); if(!elmt) { return false; } var newItem = new Zotero.Item("book"); newItem.extra = ""; newItem.series = ""; var seriesItemCount = 0; while(elmt) { try { var node = doc.evaluate(''./TD[1]/A[1]/strong[1]/text()[1]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if(!node) { var node = doc.evaluate(''./TD[1]/text()[1]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); } if(node) { var casedField = Zotero.Utilities.superCleanString(doc.evaluate(''./TH[1]/text()[1]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().nodeValue); field = casedField.toLowerCase(); var value = Zotero.Utilities.superCleanString(node.nodeValue); if(field == "publisher") { newItem.publisher = value; } else if(field == "pub date") { var re = /[0-9]+/; var m = re.exec(value); newItem.date = m[0]; } else if(field == "isbn") { var re = /^[0-9](?:[0-9X]+)/; var m = re.exec(value); newItem.ISBN = m[0]; } else if(field == "title") { var titleParts = value.split(" / "); re = /\[(.+)\]/i; if (re.test(titleParts[0])) { var ar = re.exec(titleParts[0]); var itype = ar[1].toLowerCase(); if(itype== "phonodisc" || itype == "sound recording"){ newItem.itemType = "audioRecording"; }else if(itype=="videorecording"){ newItem.itemType = "videoRecording"; }else if(itype=="electronic resource"){ newItem.itemType = "webPage"; } } newItem.title = Zotero.Utilities.capitalizeTitle(titleParts[0]); }else if(field == "series") {//push onto item, delimit with semicolon when needed if (seriesItemCount != 0){ newItem.series += "; " + value; } else if(seriesItemCount == 0) { newItem.series = value; } seriesItemCount++;//bump counter }else if(field == "dissertation note") { newItem.itemType = "thesis"; var thesisParts = value.split("--"); var uniDate = thesisParts[1].split(", "); newItem.university = uniDate[0]; newItem.date = uniDate[1]; }else if(field == "edition") { newItem.edition = value; }else if(field == "physical descrip") { //support var physParts = value.split(" : "); var physParts = physParts[0].split(" ; "); newItem.pages = physParts[0]; } else if(field == "publication info") { var pubParts = value.split(" : "); newItem.place = pubParts[0]; newItem.publisher = pubParts[1]; } else if(field == "personal author") { newItem.creators.push(Zotero.Utilities.cleanAuthor(value, "author", true)); } else if(field == "performer") { newItem.creators.push(Zotero.Utilities.cleanAuthor(value, "performer", true)); } else if(field == "author"){ newItem.creators.push(Zotero.Utilities.cleanAuthor(value, "author", true)); } else if(field == "added author") { newItem.creators.push(Zotero.Utilities.cleanAuthor(value, "contributor", true)); } else if(field == "conference author" || field == "corporate author") { newItem.creators.push(value); } else if(field == "subject" || field == "corporate subject" || field == "geographic term") { var subjects = value.split("--"); newItem.tags = newItem.tags.concat(subjects); } else if(field == "personal subject") { var subjects = value.split(", "); newItem.tags = newItem.tags.push(value[0]+", "+value[1]); } else if(value && field != "http") { newItem.extra += casedField+": "+value+"\n"; } } } catch (e) {} elmt = elmts.iterateNext(); } if(newItem.extra) { newItem.extra = newItem.extra.substr(0, newItem.extra.length-1); } var callNumber = doc.evaluate(''//tr/td[1][@class="holdingslist"]/strong/text()'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if(callNumber && callNumber.nodeValue) { newItem.callNumber = callNumber.nodeValue; } var domain = doc.location.href.match(/https?:\/\/([^/]+)/); newItem.repository = domain[1]+" Library Catalog"; newItem.accessed = Date(); newItem.complete(); return true; } function doWeb(doc, url){ var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var sirsiNew = true; //toggle between SIRSI -2003 and SIRSI 2003+ var xpath = ''//td[@class="searchsum"]/table''; if(doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { Zotero.debug("SIRSI doWeb: searchsum"); sirsiNew = true; } else if (doc.evaluate(''//form[@name="hitlist"]/table/tbody/tr'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { Zotero.debug("SIRSI doWeb: hitlist"); sirsiNew = false; } else if (doc.evaluate(''//tr[th[@class="viewmarctags"]][td[@class="viewmarctags"]]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { Zotero.debug("SIRSI doWeb: viewmarctags"); sirsiNew = true; } else if (doc.evaluate(''//input[@name="VOPTIONS"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { Zotero.debug("SIRSI doWeb: VOPTIONS"); sirsiNew = false; } else { var elmts = doc.evaluate(''/html/body/form//text()'', doc, nsResolver, XPathResult.ANY_TYPE, null); while(elmt = elmts.iterateNext()) { if(Zotero.Utilities.superCleanString(elmt.nodeValue) == "Viewing record") { Zotero.debug("SIRSI doWeb: Viewing record"); sirsiNew = false; } } } if (sirsiNew) { //executes Simon''s SIRSI 2003+ scraper code Zotero.debug("Running SIRSI 2003+ code"); if(!scrape(doc)) { var checkboxes = new Array(); var urls = new Array(); var availableItems = new Array(); //begin IUCAT fixes by Andrew Smith var iuRe = /^https?:\/\/www\.iucat\.iu\.edu/; var iu = iuRe.exec(url); //IUCAT fix 1 of 2 if (iu){ var tableRows = doc.evaluate(''//td[@class="searchsum"]/table[//input[@class="submitLink"]]'', doc, nsResolver, XPathResult.ANY_TYPE, null); } else{ var tableRows = doc.evaluate(''//td[@class="searchsum"]/table[//input[@value="Details"]]'', doc, nsResolver, XPathResult.ANY_TYPE, null); } var tableRow = tableRows.iterateNext(); // skip first row // Go through table rows while(tableRow = tableRows.iterateNext()) { //IUCAT fix 2 of 2 if (iu){ var input = doc.evaluate(''.//input[@class="submitLink"]'', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); var text = doc.evaluate(''.//label/span'', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; } else { var input = doc.evaluate(''.//input[@value="Details"]'', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); var text = doc.evaluate(''.//label/strong'', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; } //end IUCAT fixes by Andrew Smith if(text) { availableItems[input.name] = text; } } var items = Zotero.selectItems(availableItems); if(!items) { return true; } var hostRe = new RegExp("^http(?:s)?://[^/]+"); var m = hostRe.exec(doc.location.href); Zotero.debug("href: " + doc.location.href); var hitlist = doc.forms.namedItem("hitlist"); var baseUrl = m[0]+hitlist.getAttribute("action")+"?first_hit="+hitlist.elements.namedItem("first_hit").value+"&last_hit="+hitlist.elements.namedItem("last_hit").value; var uris = new Array(); for(var i in items) { uris.push(baseUrl+"&"+i+"=Details"); } Zotero.Utilities.processDocuments(uris, function(doc) { scrape(doc) }, function() { Zotero.done() }, null); Zotero.wait(); } } else{ //executes Simon''s SIRSI -2003 translator code Zotero.debug("Running SIRSI -2003 code"); var uri = doc.location.href; var recNumbers = new Array(); var xpath = ''//form[@name="hitlist"]/table/tbody/tr''; var elmts = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var elmt = elmts.iterateNext(); if(elmt) { // Search results page var uriRegexp = /^http:\/\/[^\/]+/; var m = uriRegexp.exec(uri); var postAction = doc.forms.namedItem("hitlist").getAttribute("action"); var newUri = m[0]+postAction.substr(0, postAction.length-1)+"40"; var titleRe = /<br>\s*(.*[^\s])\s*<br>/i; var items = new Array(); do { var checkbox = doc.evaluate(''.//input[@type="checkbox"]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); // Collect title var title = doc.evaluate("./td[2]", elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; if(checkbox && title) { items[checkbox.name] = Zotero.Utilities.cleanString(title); } } while(elmt = elmts.iterateNext()); items = Zotero.selectItems(items); if(!items) { return true; } for(var i in items) { recNumbers.push(i); } } else {// Normal page // this regex will fail about 1/100,000,000 tries var uriRegexp = /^((.*?)\/([0-9]+?))\//; var m = uriRegexp.exec(uri); var newUri = m[1]+"/40" var elmts = doc.evaluate(''/html/body/form'', doc, nsResolver, XPathResult.ANY_TYPE, null); while(elmt = elmts.iterateNext()) { var initialText = doc.evaluate(''.//text()[1]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if(initialText && initialText.nodeValue && Zotero.Utilities.superCleanString(initialText.nodeValue) == "Viewing record") { recNumbers.push(doc.evaluate(''./b[1]/text()[1]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().nodeValue); break; } } } var translator = Zotero.loadTranslator("import"); translator.setTranslator("a6ee60df-1ddc-4aae-bb25-45e0537be973"); var marc = translator.getTranslatorObject(); Zotero.Utilities.loadDocument(newUri+''?marks=''+recNumbers.join(",")+''&shadow=NO&format=FLAT+ASCII&sort=TITLE&vopt_elst=ALL&library=ALL&display_rule=ASCENDING&duedate_code=l&holdcount_code=t&DOWNLOAD_x=22&DOWNLOAD_y=12&address=&form_type='', function(doc) { var pre = doc.getElementsByTagName("pre"); var text = pre[0].textContent; var documents = text.split("*** DOCUMENT BOUNDARY ***"); for(var j=1; j<documents.length; j++) { var uri = newUri+"?marks="+recNumbers[j]+"&shadow=NO&format=FLAT+ASCII&sort=TITLE&vopt_elst=ALL&library=ALL&display_rule=ASCENDING&duedate_code=l&holdcount_code=t&DOWNLOAD_x=22&DOWNLOAD_y=12&address=&form_type="; var lines = documents[j].split("\n"); var record = new marc.record(); var tag, content; var ind = ""; for(var i=0; i<lines.length; i++) { var line = lines[i]; if(line[0] == "." && line.substr(4,2) == ". ") { if(tag) { content = content.replace(/\|([a-z])/g, marc.subfieldDelimiter+"$1"); record.addField(tag, ind, content); } } else { content += " "+line.substr(6); continue; } tag = line.substr(1, 3); if(tag[0] != "0" || tag[1] != "0") { ind = line.substr(6, 2); content = line.substr(8); } else { content = line.substr(7); if(tag == "000") { tag = undefined; record.leader = "00000"+content; Zotero.debug("the leader is: "+record.leader); } } } var newItem = new Zotero.Item(); record.translate(newItem); var domain = url.match(/https?:\/\/([^/]+)/); newItem.repository = domain[1]+" Library Catalog"; newItem.complete(); } Zotero.done(); }); Zotero.wait(); } }'); REPLACE INTO translators VALUES ('a69deb08-47d9-46ad-afca-bc3a2499ad34', '1.0.0b4.r5', '', '2008-05-15 00:30:00', '1', '100', '4', 'Royal Historical Society', 'Michael Berkowitz', 'http://www.rhs.ac.uk/bibl/', 'function detectWeb(doc, url) { if (doc.evaluate(''//tr/td[3][@class="bib_data"]/a[@class="bibref"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else if (doc.evaluate(''//a[text() = "View records in XML"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "book"; } }', 'function doWeb(doc, url) { var books = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var xpath = ''//a[@class="bibref"]''; var results = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null); var result; while (result = results.iterateNext()) { items[result.href] = Zotero.Utilities.trimInternal(result.textContent); } items = Zotero.selectItems(items); for (var i in items) { books.push(i.replace(/DATABASE=[^&]+/, "DATABASE=xmlcatalo")); } } else { books = [url.replace(/DATABASE=[^&]+/, "DATABASE=xmlcatalo")]; } for each (var link in books) { Zotero.Utilities.HTTP.doGet(link, function(text) { text = text.replace(/<\?[^?]+\?>/, ""); var xml = new XML(text); xml = xml..recordList; var itemtype = "book"; if (xml..journal_title.length() != 0) itemtype = "journalArticle"; var item = new Zotero.Item(itemtype); item.title = Zotero.Utilities.capitalizeTitle(xml..title.toString()); for (var i = 0; i < xml..author.length(); i++) { var name = xml..author[i].toString().match(/^[^,]+,[^,]+/)[0].split(/,\s+/); item.creators.push({lastName:name[0], firstName:name[1], creatorType:"author"}); } if (item.itemType == "book") { item.place = xml..place_of_publication.toString(); item.publisher = xml..publisher.toString(); item.date = xml..publication_year.toString(); } else if (item.itemType == "journalArticle") { item.publicationTitle = xml..journal_title.toString(); var voliss = xml..journal_number.split(":"); Zotero.debug(voliss); item.volume = voliss[0]; item.issue = voliss[1]; item.date = xml..journal_issue_year; item.pages = xml..journal_pages; } item.complete(); }); Zotero.done; } Zotero.wait(); }'); REPLACE INTO translators VALUES ('d921155f-0186-1684-615c-ca57682ced9b', '1.0.0b4.r1', '', '2009-01-28 18:10:00', 1, 100, 4, 'JSTOR', 'Simon Kornblith, Sean Takats, Michael Berkowitz and Eli Osherovich', 'https?://[^/]*jstor\.org[^/]*/(action/(showArticle|doBasicSearch|doAdvancedSearch|doLocatorSearch)|stable/|pss/)', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; // See if this is a seach results page or Issue content if (doc.title == "JSTOR: Search Results" || url.match(/\/i\d+/)) { return "multiple"; } else if(url.indexOf("/search/") != -1) { return false; } // If this is a view page, find the link to the citation var xpath = ''//a[@id="favorites"]''; var elmt = doc.evaluate(xpath, doc, nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; if(elmt || url.match(/pss/)) { return "journalArticle"; } }', 'function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var host = doc.location.host; // If this is a view page, find the link to the citation var xpath = ''//a[@id="favorites"]''; var elmt = doc.evaluate(xpath, doc, nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; var allJids = new Array(); if (elmt && /jid=(\d+)/.test(elmt.href)) { allJids.push(RegExp.$1); Zotero.debug("JID found 1 " + jid); } else if (/(?:pss|stable)\/(\d+)/.test(url)) { Zotero.debug("URL " + url); allJids.push(RegExp.$1); Zotero.debug("JID found 2 " + jid); } else { // We have multiple results var resultsBlock = doc.evaluate(''//fieldset[@id="results"]'', doc, nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; if (! resultsBlock) { return true; } var allTitlesElmts = doc.evaluate(''//li/ul/li/a[@class="title"]'', resultsBlock, nsResolver, XPathResult.ANY_TYPE, null); var currTitleElmt; var availableItems = new Object(); while (currTitleElmt = allTitlesElmts.iterateNext()) { var title = currTitleElmt.textContent; var jid = currTitleElmt.href.match(/stable\/(\d+)/)[1]; if (jid) { availableItems[jid] = title; } Zotero.debug("Found title " + title+jid); } Zotero.debug("End of titles"); var selectedItems = Zotero.selectItems(availableItems); if (!selectedItems) { return true; } for (var j in selectedItems) { Zotero.debug("Pushing " + j); allJids.push(j); } } for (var i in allJids) { var downloadString = "&suffix="+allJids[i]; Zotero.Utilities.HTTP.doPost("http://"+host+"/action/downloadSingleCitation?format=refman&direct=true&singleCitation=true",downloadString, function(text) { // load translator for RIS var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { if(item.notes && item.notes[0]) { // For some reason JSTOR exports abstract with ''AB'' tag istead of ''N1'' item.abstractNote = item.notes[0].note; delete item.notes; item.notes = undefined; } item.attachments[0].title = item.title; item.attachments[0].mimeType = "text/html"; if (/stable\/(\d+)/.test(item.url)) { var localJid = RegExp.$1; // Add DOI if (! item.DOI) { item.DOI = "10.2307/"+localJid; } var pdfurl = "http://"+ host + "/stable/pdfplus/" + localJid + ".pdf"; item.attachments.push({url:pdfurl, title:"JSTOR Full Text PDF", mimeType:"application/pdf"}); } item.complete(); }); translator.translate(); Zotero.done(); }); } }'); REPLACE INTO translators VALUES ('e8fc7ebc-b63d-4eb3-a16c-91da232f7220', '1.0.0b4.r5', '', '2008-02-12 10:00:00', '0', '100', '4', 'Aluka', 'Sean Takats', 'https?://(?:www\.)aluka.org/action/(?:showMetadata\?doi=[^&]+|doSearch\?|doBrowseResults\?)', 'function detectWeb(doc, url){ var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var xpath = ''//a[@class="title"]''; if (url.match(/showMetadata\?doi=[^&]+/)){ return "document"; } else if(doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } }', '// Aluka types we can import // TODO: Improve support for other Aluka item types? // Correspondence, Circulars, Newsletters, Interviews, Pamphlets, Policy Documents, Posters, Press Releases, Reports, Testimonies, Transcripts var typeMap = { "Books":"book", "Aluka Essays":"report", "photograph":"artwork", "Photographs":"artwork", "Panoramas":"artwork", "Journals (Periodicals)":"journalArticle", "Articles":"journalArticle", "Correspondence":"letter", "Interviews":"interview", "Reports":"report" } function doWeb(doc, url){ var urlString = "http://www.aluka.org/action/showPrimeXML?doi=" ; var uris = new Array(); var m = url.match(/showMetadata\?doi=([^&]+)/); if (m) { //single page uris.push(urlString+ m[1]); } else { //search results page var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var xpath = ''//a[@class="title"]''; var items = new Object(); var elmts = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var elmt; while (elmt = elmts.iterateNext()) { var title = elmt.textContent; var link = elmt.href; var m = link.match(/showMetadata\?doi=([^&]+)/); if (title && m){ items[m[1]] = title; } } var items = Zotero.selectItems(items); if(!items) { return true; } for(var i in items) { uris.push(urlString + i); } } // http://www.aluka.org/action/showPrimeXML?doi=10.5555/AL.SFF.DOCUMENT.cbp1008 Zotero.Utilities.HTTP.doGet(uris, function(text) { text = text.replace(/<\?xml[^>]*\?>/, ""); // strip xml header text = text.replace(/(<[^>\.]*)\.([^>]*>)/g, "$1_$2"); // replace dots in tags with underscores var xml = new XML(text); var metadata = xml..MetadataDC; var itemType = "Unknown"; if (metadata.length()){ itemType = "document"; if (metadata[0].Type.length()){ var value = metadata[0].Type[0].text().toString(); if(typeMap[value]) { itemType = typeMap[value]; } else { Zotero.debug("Unmapped Aluka Type: " + value); } } var newItem = new Zotero.Item(itemType); var title = ""; if (metadata[0].Title.length()){ var title = Zotero.Utilities.trimInternal(metadata[0].Title[0].text().toString()); if (title == ""){ title = " "; } newItem.title = title; } if (metadata[0].Title_Alternative.length()){ newItem.extra = Zotero.Utilities.trimInternal(metadata[0].Title_Alternative[0].text().toString()); } for(var i=0; i<metadata[0].Subject_Enriched.length(); i++) { newItem.tags.push(Zotero.Utilities.trimInternal(metadata[0].Subject_Enriched[i].text().toString())); } for(var i=0; i<metadata[0].Coverage_Spatial.length(); i++) { newItem.tags.push(Zotero.Utilities.trimInternal(metadata[0].Coverage_Spatial[i].text().toString())); } for(var i=0; i<metadata[0].Coverage_Temporal.length(); i++) { newItem.tags.push(Zotero.Utilities.trimInternal(metadata[0].Coverage_Temporal[i].text().toString())); } // TODO: decide whether to uncomment below code to import species data as tags // for(var i=0; i<xml..TopicName.length(); i++) { // newItem.tags.push(Zotero.Utilities.trimInternal(xml..TopicName[i].text().toString())); // } if (metadata[0].Date.length()){ var date = metadata[0].Date[0].text().toString(); if (date.match(/^\d{8}$/)){ date = date.substr(0, 4) + "-" + date.substr(4, 2) + "-" + date.substr(6, 2); } newItem.date = date; } if (metadata[0].Creator.length()){ var authors = metadata[0].Creator; var type = "author"; for(var j=0; j<authors.length(); j++) { Zotero.debug("author: " + authors[j]); newItem.creators.push(Zotero.Utilities.cleanAuthor(authors[j].text().toString(),type,true)); } } if (metadata[0].Contributor.length()){ var authors = metadata[0].Contributor; var type = "contributor"; for(var j=0; j<authors.length(); j++) { Zotero.debug("author: " + authors[j]); newItem.creators.push(Zotero.Utilities.cleanAuthor(authors[j].text().toString(),type,true)); } } if (metadata[0].Publisher.length()){ newItem.publisher = Zotero.Utilities.trimInternal(metadata[0].Publisher[0].text().toString()); } if (metadata[0].Format_Medium.length()){ newItem.medium = Zotero.Utilities.trimInternal(metadata[0].Format_Medium[0].text().toString()); } if (metadata[0].Language.length()){ newItem.language = Zotero.Utilities.trimInternal(metadata[0].Language[0].text().toString()); } if (metadata[0].Description.length()){ newItem.abstractNote = metadata[0].Description[0].text().toString(); } if (metadata[0].Format_Extent.length()){ newItem.pages = Zotero.Utilities.trimInternal(metadata[0].Format_Extent[0].text().toString()); } var doi = xml..DOI; if (doi.length()){ newItem.DOI = doi[0]; var newUrl = "http://www.aluka.org/action/showMetadata?doi=" + doi[0]; newItem.attachments.push({title:"Aluka Link", snapshot:false, mimeType:"text/html", url:newUrl}); var pdfUrl = "http://ts-den.aluka.org/delivery/aluka-contentdelivery/pdf/" + doi[0] + "?type=img&q=high"; newItem.attachments.push({url:pdfUrl}); newItem.url = newUrl; } var rights = xml..Rights.Attribution; if (rights.length()){ newItem.rights = rights[0]; } if (metadata[0].Rights.length()){ newItem.rights = Zotero.Utilities.trimInternal(metadata[0].Rights[0].text().toString()); } if (metadata[0].Source.length()){ newItem.repository = "Aluka: " + Zotero.Utilities.trimInternal(metadata[0].Source[0].text().toString()); } if (metadata[0].Relation.length()){ newItem.callNumber = Zotero.Utilities.trimInternal(metadata[0].Relation[0].text().toString()); } newItem.complete(); } else { Zotero.debug("No Dublin Core XML data"); return false; } Zotero.done(); }); Zotero.wait(); }'); REPLACE INTO translators VALUES ('e85a3134-8c1a-8644-6926-584c8565f23e', '1.0.0b4.r1', '', '2008-05-06 08:15:00', '1', '100', '4', 'History Cooperative', 'Simon Kornblith', 'https?://[^/]*historycooperative\.org[^/]*/(?:journals/.+/.+/.+\.s?html$|cgi-bin/search.cgi|journals/(?!cp|whc).+/.+/)', 'function detectWeb(doc, url) { var contents = doc.title.replace("Contents", ""); if(doc.title != contents || doc.title == "History Cooperative: Search Results") { return "multiple"; } else { return "journalArticle"; } }', 'function associateMeta(newItem, metaTags, field, zoteroField) { var field = metaTags.namedItem(field); if(field) { newItem[zoteroField] = field.getAttribute("content"); } } function scrape(doc) { var newItem = new Zotero.Item("journalArticle"); newItem.url = doc.location.href; var month, year; var metaTags = doc.getElementsByTagName("meta"); associateMeta(newItem, metaTags, "Journal", "publicationTitle"); associateMeta(newItem, metaTags, "Volume", "volume"); associateMeta(newItem, metaTags, "Issue", "issue"); // grab title without using meta tag, since when titles have quotes History // Cooperative can''t create a proper meta tag // 16apr08 - fwg // as of now, title meta tags are properly escaped, but // in the case of book reviews, the title field is set to one of many (~10) variations // of "Book Review", so it''s easiest to get the book title from the proprietary tags (below) as originally coded. var titleRe = /<!--_title_-->(.*)<!--_\/title_-->/; // 16apr08 - fwg // added trimInteral, since some pages have extraneous line breaks in source code // added unescapeHTML to make quotes nice var m = titleRe.exec(Zotero.Utilities.trimInternal(doc.getElementsByTagName("body")[0].innerHTML)); if(m) { newItem.title = Zotero.Utilities.trimInternal(Zotero.Utilities.unescapeHTML(m[1])); } else { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var bookTitle; //different journals want their reviewed book titles formatted in different ways (or have bizarre markup) jNames = new Array ("The Western Historical Quarterly", "Journal of American Ethnic History", "Labour History","Environmental History", "New York History","Indiana Magazine of History"); jXpaths = new Array("//tr[4]/td[3]/table/tbody/tr[1]/td/b/i", "//[4]/td[3]/table/tbody/tr[1]/td/b/i", "//tr[4]/td[3]/table/tbody/tr[1]/td/b/b/i", "//tr[4]/td[3]/table/tbody/tr[1]/td/b[1]", "//tr[4]/td[3]/p[1]/font/b/i", "//tr[4]/td[3]/table[1]/tbody/tr[1]/td/h4/font/i" ); // 16apr08 - fwg // figure out which Xpath to use // the below Xpath seems to work much of the time, so we default to it var jXpath =''//tr[4]/td[3]/table/tbody/tr[1]/td/i''; for (var i=0; i < jNames.length; i++) { if (newItem.publicationTitle == jNames[i]) { //Zotero.debug("using Xpath for: " + jNames[i]); //Zotero.debug("Xpath is: " + jXpaths[i]); jXpath = jXpaths[i]; } } bookTitle = doc.evaluate(jXpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); //Zotero.debug("bookTitle: " + bookTitle); // 16apr08 - fwg //instead of general failure, let''s admit we can''t get the title and save everything else // this is useful when a book review page has a one-off introduction or strange formatting that we can''t anticipate. if (bookTitle) { newItem.title = "Review of " + bookTitle.textContent; } else { newItem.title = "Review of <unable to get title from page>"; } } var author = metaTags.namedItem("Author"); if(author) { var authors = author.getAttribute("content").split(" and "); for(j in authors) { authors[j] = authors[j].replace("Reviewed by ", ""); newItem.creators.push(Zotero.Utilities.cleanAuthor(authors[j], "author")); } } var month = metaTags.namedItem("PublicationMonth"); var year = metaTags.namedItem("PublicationYear"); if(month && year) { newItem.date = month.getAttribute("content")+" "+year.getAttribute("content"); } newItem.attachments.push({document:doc, title:"History Cooperative Snapshot"}); newItem.complete(); } function doWeb(doc, url) { var contents = doc.title.replace(" Contents | ", ""); if(doc.title != contents || doc.title == "History Cooperative: Search Results") { var items = Zotero.Utilities.getItemArray(doc, doc, ''^https?://[^/]+/journals/.+/.+/.+\.html$''); items = Zotero.selectItems(items); if(!items) { return true; } var uris = new Array(); for(var i in items) { uris.push(i); } Zotero.Utilities.processDocuments(uris, function(doc) { scrape(doc) }, function() { Zotero.done(); }, null); Zotero.wait(); } else { scrape(doc); } }'); REPLACE INTO translators VALUES ('4c9dbe33-e64f-4536-a02f-f347fa1f187d', '1.0.0b4.r5', '', '2008-04-03 19:45:00', '0', '100', '4', 'BioInfoBank', 'Michael Berkowitz', 'http://lib.bioinfo.pl/', 'function detectWeb(doc, url) { return "multiple"; }', 'function doWeb(doc, url) { var pmids = new Array(); var items = new Object(); var titles = doc.evaluate(''//div[@class="css_pmid"]/div[@class="css_pmid_title"]/a'', doc, null, XPathResult.ANY_TYPE, null); var title; while (title = titles.iterateNext()) { items[title.href] = Zotero.Utilities.trimInternal(title.textContent); } items = Zotero.selectItems(items); for (var i in items) { pmids.push(i.match(/pmid:(\d+)/)[1]); } var newUri = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=PubMed&retmode=xml&rettype=citation&id="+pmids.join(","); Zotero.Utilities.HTTP.doGet(newUri, function(text) { // Remove xml parse instruction and doctype text = text.replace(/<!DOCTYPE[^>]*>/, "").replace(/<\?xml[^>]*\?>/, ""); var xml = new XML(text); for(var i=0; i<xml.PubmedArticle.length(); i++) { var newItem = new Zotero.Item("journalArticle"); var citation = xml.PubmedArticle[i].MedlineCitation; var PMID = citation.PMID.text().toString(); newItem.extra = "PMID: "+PMID; // add attachments if(doc) { newItem.attachments.push({document:doc, title:"PubMed Snapshot"}); } else { var url = "http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=pubmed&cmd=Retrieve&dopt=AbstractPlus&list_uids="+PMID; newItem.attachments.push({url:url, title:"PubMed Snapshot", mimeType:"text/html"}); } var article = citation.Article; if(article.ArticleTitle.length()) { var title = article.ArticleTitle.text().toString(); if(title.substr(-1) == ".") { title = title.substring(0, title.length-1); } newItem.title = title; } if (article.Pagination.MedlinePgn.length()){ newItem.pages = article.Pagination.MedlinePgn.text().toString(); } if(article.Journal.length()) { var issn = article.Journal.ISSN.text().toString(); if(issn) { newItem.ISSN = issn.replace(/[^0-9]/g, ""); } newItem.journalAbbreviation = Zotero.Utilities.superCleanString(citation.MedlineJournalInfo.MedlineTA.text().toString()); if(article.Journal.Title.length()) { newItem.publicationTitle = Zotero.Utilities.superCleanString(article.Journal.Title.text().toString()); } else if(citation.MedlineJournalInfo.MedlineTA.length()) { newItem.publicationTitle = newItem.journalAbbreviation; } if(article.Journal.JournalIssue.length()) { newItem.volume = article.Journal.JournalIssue.Volume.text().toString(); newItem.issue = article.Journal.JournalIssue.Issue.text().toString(); if(article.Journal.JournalIssue.PubDate.length()) { // try to get the date if(article.Journal.JournalIssue.PubDate.Day.text().toString() != "") { newItem.date = article.Journal.JournalIssue.PubDate.Month.text().toString()+" "+article.Journal.JournalIssue.PubDate.Day.text().toString()+", "+article.Journal.JournalIssue.PubDate.Year.text().toString(); } else if(article.Journal.JournalIssue.PubDate.Month.text().toString() != "") { newItem.date = article.Journal.JournalIssue.PubDate.Month.text().toString()+" "+article.Journal.JournalIssue.PubDate.Year.text().toString(); } else if(article.Journal.JournalIssue.PubDate.Year.text().toString() != "") { newItem.date = article.Journal.JournalIssue.PubDate.Year.text().toString(); } } } } if(article.AuthorList.length() && article.AuthorList.Author.length()) { var authors = article.AuthorList.Author; for(var j=0; j<authors.length(); j++) { var lastName = authors[j].LastName.text().toString(); var firstName = authors[j].FirstName.text().toString(); if(firstName == "") { var firstName = authors[j].ForeName.text().toString(); } if(firstName || lastName) { newItem.creators.push({lastName:lastName, firstName:firstName}); } } } if (citation.MeshHeadingList && citation.MeshHeadingList.MeshHeading) { var keywords = citation.MeshHeadingList.MeshHeading; for (var k = 0 ; k < keywords.length() ; k++) { newItem.tags.push(keywords[k].DescriptorName.text().toString()); } } newItem.abstractNote = article.Abstract.AbstractText.toString() newItem.complete(); } Zotero.done(); }); }'); REPLACE INTO translators VALUES ('2e43f4a9-d2e2-4112-a6ef-b3528b39b4d2', '1.0.0b4.r5', '', '2008-04-28 17:50:00', '1', '100', '4', 'MIT Press Journals', 'Michael Berkowitz', 'http://www.mitpressjournals.org/', 'function detectWeb(doc, url) { if (url.match(/action\/doSearch/) || url.match(/toc\//)) { return "multiple"; } else if (url.match(/doi\/abs\//)) { return "journalArticle"; } }', 'function getDOI(str) { return str.match(/doi\/abs\/([^?]+)/)[1]; } function doWeb(doc, url) { var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var links = doc.evaluate(''//table[@class="articleEntry"]/tbody/tr//a[text() = "First Page" or text() = "Citation" or text() = "Abstract"]'', doc, null, XPathResult.ANY_TYPE, null); var titles = doc.evaluate(''//table[@class="articleEntry"]/tbody/tr//div[@class="arttitle"]'', doc, null, XPathResult.ANY_TYPE, null); var link, title; while ((link = links.iterateNext()) && (title = titles.iterateNext())) { items[link.href] = Zotero.Utilities.trimInternal(title.textContent); } items = Zotero.selectItems(items); for (var i in items) { articles.push(''http://www.mitpressjournals.org/doi/abs/'' + getDOI(i)); } } else { articles = [''http://www.mitpressjournals.org/doi/abs/'' + getDOI(url)]; } Zotero.Utilities.processDocuments(articles, function(newDoc) { if (newDoc.evaluate(''//div[@class="abstractSection"]/p[contains(@class, "last") or contains(@class, "first")]'', newDoc, null, XPathResult.ANY_TYPE, null).iterateNext()) { var abs = Zotero.Utilities.trimInternal(newDoc.evaluate(''//div[@class="abstractSection"]/p[contains(@class, "last") or contains(@class, "first")]'', newDoc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); } var doi = getDOI(newDoc.location.href); var risurl = ''http://www.mitpressjournals.org/action/downloadCitation?doi='' + doi + ''&include=cit&format=refman&direct=on&submit=Download+article+metadata''; var pdfurl = newDoc.location.href.replace("/doi/abs/", "/doi/pdf/"); Zotero.Utilities.HTTP.doGet(risurl, function(text) { var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { if (item.notes[0][''note''].match(/doi:/)) { item.DOI = item.notes[0][''note''].substr(5); item.notes = new Array(); } item.attachments[0].title= item.publicationTitle + " Snapshot"; item.attachments[0].mimeType = "text/html"; item.attachments.push({url:pdfurl, title:item.publicationTitle + " Full Text PDF", mimeType:"application/pdf"}); if (abs) item.abstractNote = abs; item.complete(); }); translator.translate(); }); }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('b0abb562-218c-4bf6-af66-c320fdb8ddd3', '1.0.0b4.r5', '', '2008-04-01 04:50:00', '0', '100', '4', 'Philosopher''s Imprint', 'Michael Berkowitz', 'http://quod.lib.umich.edu/cgi/t/', 'function detectWeb(doc, url) { if (doc.evaluate(''//div/span[text() = "Search Results"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else if (url.match(/\d+\.\d+\.\d+/)) { return "journalArticle"; } }', 'function getID(str) { return str.match(/\d+\.\d+\.\d+/)[0]; } function doWeb(doc, url) { var ids = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var titles = doc.evaluate(''//div[@class="itemcitation"]//a'', doc, null, XPathResult.ANY_TYPE, null); var title; while (title = titles.iterateNext()) { items[title.href] = title.textContent; } items = Zotero.selectItems(items); for (var i in items) { ids.push(''http://quod.lib.umich.edu/cgi/t/text/text-idx?c=phimp;view=text;rgn=main;idno='' + getID(i)); } } else { ids = [''http://quod.lib.umich.edu/cgi/t/text/text-idx?c=phimp;view=text;rgn=main;idno='' + getID(url)]; } Zotero.Utilities.processDocuments(ids, function(newDoc) { var rows = newDoc.evaluate(''//tr[td[@id="labelcell"]]'', newDoc, null, XPathResult.ANY_TYPE, null); var row; var data = new Object(); while (row = rows.iterateNext()) { var heading = newDoc.evaluate(''./td[1]'', row, null, XPathResult.ANY_TYPE, null).iterateNext().textContent; var value = newDoc.evaluate(''./td[2]'', row, null, XPathResult.ANY_TYPE, null).iterateNext().textContent; data[heading.replace(/[\s:]/g, "")] = value; } var item = new Zotero.Item("journalArticle"); item.title = Zotero.Utilities.trimInternal(data[''Title'']); if (data[''Author'']) { item.creators.push(Zotero.Utilities.cleanAuthor(data[''Author''], "author")); } else if (data[''Authors'']) { var authors = data[''Authors''].split(","); for each (var a in authors) { item.creators.push(Zotero.Utilities.cleanAuthor(a, "author")); } } if (data[''Keywords'']) { var kws = data[''Keywords''].split(/\n/); for each (var kw in kws) { if (kw != "") item.tags.push(kw); } } var voliss = data[''Source''].replace(item.title, ""); if (item.creators.length > 1) { voliss = voliss.replace(data[''Authors''], ""); } else if (item.creators.length == 1) { voliss = voliss.replace(data[''Author''], ""); } Zotero.debug(voliss); item.volume = voliss.match(/vol\.\s+(\d+)/)[1]; item.issue = voliss.match(/no\.\s+(\d+)/)[1]; item.pages = voliss.match(/pp\.\s+([\d\-]+)/)[1]; item.date = Zotero.Utilities.trimInternal(voliss.match(/[^,]+$/)[0]); item.place = "Ann Arbor, MI"; item.publisher = "University of Michigan"; item.abstractNote = data[''Abstract'']; item.url = data[''URL'']; item.attachments = [ {url:item.url, title:item.title + " Snapshot", mimeType:"text/html"}, {url:''http://quod.lib.umich.edu/p/phimp/images/'' + getID(item.url) + ''.pdf'', title:"Philosopher''s Imprint Full Text PDF", mimeType:"application/pdf"} ]; item.complete(); }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('2a5dc3ed-ee5e-4bfb-baad-36ae007e40ce', '1.0.0b4.r5', '', '2008-04-01 04:50:00', '0', '100', '4', 'Berkeley Electronic Press', 'Michael Berkowitz', 'http://www.bepress.com/', 'function detectWeb(doc, url) { if (url.match("cgi/query.cgi")) { return "multiple"; } else if (url.match(/vol[\d+]\/iss[\d]+/)) { return "journalArticle"; } }', 'var tagMap = { journal_title:"publicationTitle", title:"title", date:"date", volume:"volume", issue:"issue", abstract_html_url:"url", doi:"DOI" } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var titles = doc.evaluate(''//table[@id="query"]/tbody/tr/td[4]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_title; while (next_title = titles.iterateNext()) { items[next_title.href] = next_title.textContent; } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.debug(articles); Zotero.Utilities.processDocuments(articles, function(newDoc) { var metatags = new Object(); var metas = newDoc.evaluate(''//meta[contains(@name, "bepress_citation")]'', newDoc, null, XPathResult.ANY_TYPE, null); var next_meta; while (next_meta = metas.iterateNext()) { metatags[next_meta.name.replace("bepress_citation_", "")] = next_meta.content; } var item = new Zotero.Item("journalArticle"); //regularly mapped tags for (var tag in tagMap) { if (metatags[tag]) { item[tagMap[tag]] = metatags[tag]; } } //authors var authors = metatags[''authors''].split(";"); for each (var author in authors) { item.creators.push(Zotero.Utilities.cleanAuthor(author, "author")); } //attachments item.attachments = [ {url:item.url, title:item.title, mimeType:"text/html"}, {url:metatags[''pdf_url''], title:"Berkeley Electronic Press Full Text PDF", mimeType:"application/pdf"} ]; item.complete(); }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('7cb0089b-9551-44b2-abca-eb03cbf586d9', '1.0.0b4.r5', '', '2008-08-04 07:10:00', '0', '100', '4', 'BioOne', 'Michael Berkowitz', 'http://[^/]*www.bioone.org[^/]*/', 'function detectWeb(doc, url) { if (url.indexOf("searchtype") != -1) { return "multiple"; } else if (url.indexOf("get-document") != -1 || url.indexOf("get-abstract") != -1) { return "journalArticle"; } }', 'function createCitationURL(str) { str = str.match(/doi=([^&]+)/)[1]; return "http://www.bioone.org/perlserv/?request=cite-builder&doi=" + str; } function doWeb(doc, url) { var host = doc.location.host; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var results = doc.evaluate(''//div[@class="content"]/table/tbody/tr/td[3][@class="group"]'', doc, null, XPathResult.ANY_TYPE, null); var next_result; while (next_result = results.iterateNext()) { var title = doc.evaluate(''.//span[@class="title"]'', next_result, null, XPathResult.ANY_TYPE, null).iterateNext().textContent; var link = doc.evaluate(''.//tr[4]/td/a[1]'', next_result, null, XPathResult.ANY_TYPE, null).iterateNext().href; items[link] = title; } items = Zotero.selectItems(items); for (var i in items) { articles.push(createCitationURL(i)); } } else { articles = [createCitationURL(url)]; } Zotero.Utilities.processDocuments(articles, function(newDoc) { var newlink = newDoc.evaluate(''//a[contains(@href, "refman")]'', newDoc, null, XPathResult.ANY_TYPE, null).iterateNext().href; Zotero.Utilities.HTTP.doGet(newlink, function(text) { var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { item.url = decodeURIComponent(item.url); item.DOI = item.url.match(/http:\/\/dx\.doi\.org\/(.*)$/)[1]; var pdfurl = ''http://'' + host + ''/perlserv/?request=get-pdf&doi='' + item.DOI; item.attachments = [ {url:item.url, title:item.title, mimeType:"text/html"}, {url:pdfurl, title:"BioOne Full Text PDF", mimeType:"application/pdf"} ]; item.complete(); }); translator.translate(); }); }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('b8a86e36-c270-48c9-bdd1-22aaa167ef46', '1.0.0b4.r5', '', '2008-06-08 23:00:00', '0', '100', '4', 'Agencia del ISBN', 'Michael Berkowitz', 'http://www.mcu.es/webISBN', 'function detectWeb(doc, url) { if (doc.evaluate(''//div[@class="isbnResultado"]/div[@class="isbnResDescripcion"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else if (doc.evaluate(''//div[@class="fichaISBN"]/div[@class="cabecera"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "book"; } }', 'function doWeb(doc, url) { var books = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var boxes = doc.evaluate(''//div[@class="isbnResultado"]/div[@class="isbnResDescripcion"]'', doc, null, XPathResult.ANY_TYPE, null); var box; while (box = boxes.iterateNext()) { var book = doc.evaluate(''./p/span/strong/a'', box, null, XPathResult.ANY_TYPE, null).iterateNext(); items[book.href] = book.textContent; } items = Zotero.selectItems(items); for (var i in items) { books.push(i); } } else { books = [url]; } Zotero.Utilities.processDocuments(books, function(newDoc) { var data = new Object(); var rows = newDoc.evaluate(''//div[@class="fichaISBN"]/table/tbody/tr'', newDoc, null, XPathResult.ANY_TYPE, null); var next_row; while (next_row = rows.iterateNext()) { var heading = newDoc.evaluate(''./th'', next_row, null, XPathResult.ANY_TYPE, null).iterateNext().textContent; var value = newDoc.evaluate(''./td'', next_row, null, XPathResult.ANY_TYPE, null).iterateNext().textContent; data[heading.replace(/\W/g, "")] = value; } var isbn = Zotero.Utilities.trimInternal(newDoc.evaluate(''//span[@class="cabTitulo"]/strong'', newDoc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); var item = new Zotero.Item("book"); item.ISBN = isbn; item.title = Zotero.Utilities.trimInternal(data[''Ttulo'']); author = data[''Autores'']; if (author) { var authors = author.match(/\b.*,\s+\w+[^([]/g); for each (aut in authors) { item.creators.push(Zotero.Utilities.cleanAuthor(Zotero.Utilities.trimInternal(aut), "author", true)); } } if (data[''Publicacin'']) item.publisher = Zotero.Utilities.trimInternal(data[''Publicacin'']); if (data[''FechaEdicin'']) item.date = Zotero.Utilities.trimInternal(data[''FechaEdicin'']); item.complete(); }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('a14ac3eb-64a0-4179-970c-92ecc2fec992', '1.0.0b4.r5', '', '2008-04-01 04:50:00', '1', '100', '4', 'Scopus', 'Michael Berkowitz', 'http://[^/]*www.scopus.com[^/]*', 'function detectWeb(doc, url) { if (url.indexOf("/results/") != -1) { return "multiple"; } else if (url.indexOf("/record/") != -1) { return "journalArticle"; } }', 'function getEID(url) { return url.match(/eid=([^&]+)/)[1]; } function returnURL(eid) { return ''http://www.scopus.com/scopus/citation/output.url?origin=recordpage&eid='' + eid + ''&src=s&view=CiteAbsKeywsRefs''; } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { items = new Object(); var boxes = doc.evaluate(''//table/tbody/tr[@class]/td[@class="fldtextPad"][1]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var box; while (box = boxes.iterateNext()) { var title = Zotero.Utilities.trimInternal(doc.evaluate(''.//span[@class="txtBoldOnly"]'', box, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent); var link = doc.evaluate(''.//a[@class="outwardLink"]'', box, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().href; items[link] = title; } items = Zotero.selectItems(items); for (var i in items) { articles.push(returnURL(getEID(i))); } } else { articles = [returnURL(getEID(url))]; } Zotero.Utilities.processDocuments(articles, function(newDoc) { var eid = getEID(newDoc.location.href); var stateKey = newDoc.evaluate(''//input[@name="stateKey"]'', newDoc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().value; var get = ''http://www.scopus.com/scopus/citation/export.url''; var post = ''origin=recordpage&sid=&src=s&stateKey='' + stateKey + ''&eid='' + eid + ''&sort=&exportFormat=RIS&view=CiteAbsKeyws&selectedCitationInformationItemsAll=on''; Zotero.Utilities.HTTP.doPost(get, post, function(text) { // load translator for RIS var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { if (item.notes[0][''note'']) { item.abstractNote = item.notes[0][''note'']; item.notes = new Array(); item.complete(); } }); translator.translate(); }); }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('e1140aa1-3bcf-4226-9099-78ef0b63bb3e', '1.0.0b4.r5', '', '2008-03-19 16:00:00', '0', '100', '4', 'Osterreichischer Bibliothekenverbund', 'Michael Berkowitz', 'http://meteor.bibvb.ac.at/F', 'function detectWeb(doc, url) { if (doc.evaluate(''//td[@class="bar"]/a[@class="blue"]/img'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "book"; } else if (doc.title.indexOf("Ergebnisliste") != -1) { return "multiple"; } }', 'function doWeb(doc, url) { var arts = new Array(); if (detectWeb(doc, url) == "multiple") { var itemRegexp = ''^https?://[^/]+/F/[A-Z0-9\-]+\?.*(?:func=full-set-set.*\&format=999|func=direct)'' var items = Zotero.Utilities.getItemArray(doc, doc, itemRegexp, ''^[0-9]+$''); items = Zotero.selectItems(items); for (var i in items) { arts.push(i); } } else { arts = [url]; } Zotero.Utilities.processDocuments(arts, function(newDoc) { var link = newDoc.evaluate(''//td[@class="bar"]/a[@class="blue"][2]'', newDoc, null, XPathResult.ANY_TYPE, null).iterateNext().href; link = link.replace(/full\-mail[^&]+&/, "full-mail&") + "&option_type=&format=777&encoding=UTF_TO_WEB_MAIL+++++&SUBJECT=&NAME=&EMAIL=&x=17&y=7"; Zotero.Utilities.loadDocument([link], function(newDoc2) { var newest = newDoc2.evaluate(''/html/body/p[@class="text3"]/a'', newDoc2, null, XPathResult.ANY_TYPE, null).iterateNext().href; Zotero.Utilities.HTTP.doGet(newest, function(text) { var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { item.itemType = "book"; item.complete(); }); translator.translate(); }); }); }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('4654c76f-451c-4ae6-9a36-575e982b3cdb', '1.0.0b4.r5', '', '2008-03-14 19:10:00', '0', '100', '4', 'Investigative Ophthalmology and Visual Science', 'Michael Berkowitz', 'http://www.iovs.org/', 'function detectWeb(doc, url) { if (doc.title.indexOf("Table of Contents") != -1 || doc.title.indexOf("Search Result") != -1) { return "multiple" } else if (url.indexOf("abstract") != -1 || url.indexOf("full") != -1) { return "journalArticle"; } }', 'function doWeb(doc, url) { var host = doc.location.host; var arts = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); if (doc.title.indexOf("Search Result") != -1) { var boxes = doc.evaluate(''//table/tbody/tr/td/font/table/tbody/tr[1]'', doc, null, XPathResult.ANY_TYPE, null); var box; while (box = boxes.iterateNext()) { var id = doc.evaluate(''.//input'', box, null, XPathResult.ANY_TYPE, null).iterateNext().value; var titles = doc.evaluate(''./td/font/strong'', box, null, XPathResult.ANY_TYPE, null); var titletext = ''''; var title; while (title = titles.iterateNext()) { titletext += title.textContent; } items[id] = titletext; } } else if (doc.title.indexOf("Table of Content") != -1) { var ids = doc.evaluate(''/html/body/form/dl/dt/input'', doc, null, XPathResult.ANY_TYPE, null); var titles = doc.evaluate(''/html/body/form/dl/dd/strong'', doc, null, XPathResult.ANY_TYPE, null); var id; var title; while ((title = titles.iterateNext()) && (id = ids.iterateNext())) { items[''iovs;'' + id.value] = title.textContent; } } items = Zotero.selectItems(items); for (var i in items) { arts.push(i); } } else { arts = [doc.evaluate(''//a[contains(@href, "citmgr")]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().href.match(/=(.*)$/)[1]] } Zotero.debug(arts); for each (var id in arts) { var post = ''type=refman&gca='' + id; Zotero.debug(post); post = ''http://www.iovs.org/cgi/citmgr?'' + post; Zotero.debug(post); Zotero.Utilities.HTTP.doGet(post, function(text) { Zotero.debug(text); var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { var pdfurl = item.url.replace(/content\/[^/]+/, "reprint") + ".pdf"; item.attachments = [ {url:item.url, title:"IOVS Snapshot", mimeType:"text/html"}, {url:pdfurl, tite:"IOVS Full Text PDF", mimeType:"application/pdf"} ]; if (item.notes[0][''note''].match(/\d/)) { item.DOI = item.notes[0][''note'']; item.notes = new Array(); } item.complete(); }); translator.translate(); Zotero.done(); }); } }'); REPLACE INTO translators VALUES ('62c0e36a-ee2f-4aa0-b111-5e2cbd7bb5ba', '1.0.0b4.r5', '', '2008-03-13 22:30:00', '0', '100', '4', 'MetaPress', 'Michael Berkowitz', 'https?://(.*).metapress.com/', 'function detectWeb(doc, url) { if (doc.title.indexOf("Search Results") != -1) { return "multiple"; } else if (url.match(/content\/[^?/]/)) { return "journalArticle"; } }', 'function doWeb(doc, url) { var host = doc.location.host; var artids = new Array(); if (detectWeb(doc, url) == "multiple") { } else { artids.push(url.match(/content\/([^/]+)/)[1]); } for (var i in artids) { var newurl = ''http://'' + host + ''/content/'' + artids[i]; Zotero.Utilities.processDocuments([newurl], function(newDoc) { var tagsx = ''//td[@class="mainPageContent"]/div[3]''; if (doc.evaluate(tagsx, doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { var tags = Zotero.Utilities.trimInternal(doc.evaluate(tagsx, doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent).split(","); } Zotero.Utilities.HTTP.doPost(''http://'' + host + ''/export.mpx'', ''code='' + artids[i] + ''&mode=ris'', function(text) { // load translator for RIS var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { var pdfurl = ''http://'' + host + ''/content/'' + artids[i] + ''/fulltext.pdf''; item.attachments = [ {url:item.url, title:"MetaPress Snapshot", mimeType:"text/html"}, {url:pdfurl, title:"MetaPress Full Text PDF", mimeType:"application/pdf"} ]; if (tags) item.tags = tags; if (item.abstractNote.substr(0, 8) == "Abstract") item.abstractNote = Zotero.Utilities.trimInternal(item.abstractNote.substr(8)); item.complete(); }); translator.translate(); Zotero.done(); }); }, function() {}); } }'); REPLACE INTO translators VALUES ('0b356cb6-7fa1-4662-b6e8-7ffc9ca2cd4a', '1.0.0b4.r5', '', '2008-04-23 09:45:00', '0', '100', '4', 'Progress of Theoretical Physics', 'Michael Berkowitz', 'http://ptp.ipap.jp/', 'function detectWeb(doc, url) { if (doc.title.match(/search result/) || doc.title.match(/Table of Contents/)) { return "multiple"; } else if (url.match(/getarticle\?/)) { return "journalArticle"; } }', 'function doWeb(doc, url) { var arts = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); if (doc.title.toLowerCase().match(/search result/)) { var titles = doc.evaluate(''/html/body//li//b'', doc, null, XPathResult.ANY_TYPE, null); var links = doc.evaluate(''/html/body//li/a'', doc, null, XPathResult.ANY_TYPE, null); var title; var link; while ((title = titles.iterateNext()) && (link = links.iterateNext())) { items[link.href] = Zotero.Utilities.trimInternal(title.textContent); } } else if (doc.title.toLowerCase().match(/table of contents/)) { var xpath = doc.evaluate(''/html/body/ul/li/a'', doc, null, XPathResult.ANY_TYPE, null); var text; while (text = xpath.iterateNext()) { items[text.href] = Zotero.Utilities.trimInternal(text.textContent); } } items = Zotero.selectItems(items); for (var i in items) { arts.push(i); } } else { arts = [url]; } Zotero.Utilities.processDocuments(arts, function(doc) { var item = new Zotero.Item("journalArticle"); item.ISSN = ''0033-068X''; item.title = Zotero.Utilities.trimInternal(doc.evaluate(''//h2[@class="title"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); if (doc.evaluate(''//h2[@class="subtitle"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { item.title = item.title + ": " + Zotero.Utilities.trimInternal(doc.evaluate(''//h2[@class="subtitle"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); } item.abstractNote = Zotero.Utilities.trimInternal(doc.evaluate(''//p[@class="abstract"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); var authors = Zotero.Utilities.unescapeHTML(Zotero.Utilities.trimInternal(doc.evaluate(''/html/body/p[@class="author"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent)); authors = authors.replace(/[*()]+/g, "").split(/(,\s+|\band\b)/); for each (var aut in authors) { if (!aut.match(/(,|and)/)) { item.creators.push(Zotero.Utilities.cleanAuthor(aut, "author")); } } var info = Zotero.Utilities.trimInternal(doc.evaluate(''//h4[@class="info"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); info = info.match(/Vol\.\s+(\d+)\s+No\.\s+(\d+)\s+\((\d+)\)\s+pp\.\s+([\d-]+)\s+URL\s+:\s+(.*)\s+DOI\s+:\s+(.*)$/); item.volume = info[1]; item.issue = info[2]; item.date = info[3]; item.pages = info[4]; item.url = info[5]; item.DOI = info[6]; var pdfurl = doc.evaluate(''//a[contains(text(), "PDF")]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().href; item.attachments = [ {url:item.url, title:"PTP Snapshot", mimeType:"text/html"}, {url:pdfurl, title:"PTP Full Text PDF", mimeType:"application/pdf"} ]; item.complete(); }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('0863b8ec-e717-4b6d-9e35-0b2db2ac6b0f', '1.0.0b4.r5', '', '2008-04-23 09:45:00', '0', '100', '4', 'Institute of Pure and Applied Physics', 'Michael Berkowitz', 'http://(jjap|apex|jpsj)\.ipap\.jp/', 'function detectWeb(doc, url) { if (doc.title.indexOf("Table of Contents") != -1 || doc.title.indexOf("search result") != -1) { return "multiple"; } else if (url.indexOf("link?") != -1) { return "journalArticle"; } }', 'var journalNames = { jpsj:["Journal of the Physical Society of Japan", "0031-9015"], jjap:["Japanese Journal of Applied Physics", "0021-4922"], apex:["Applied Physics Express", "1882-0778"] } function doWeb(doc, url) { var arts = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); if (doc.title.toLowerCase().indexOf("table of contents") != -1) { if (url.match(/apex/)) { var titlesx = ''//div[@id="contents"]/dl/dt''; var linksx = ''//div[@id="contents"]/dl/dd/a[1]''; } else if (url.match(/jjap/)) { var xpath = ''/html/body/dt/a''; } else if (url.match(/jpsj/)) { var xpath = ''/html/body/dl/dt/a[contains(@href, "link")]''; } } else if (doc.title.toLowerCase().indexOf("search result") != -1) { var linksx = ''/html/body//li/a''; var titlesx = ''/html/body//li//b''; } if (xpath) { var titles = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null); var title; while (title = titles.iterateNext()) { items[title.href] = Zotero.Utilities.trimInternal(title.textContent); } } else { var titles = doc.evaluate(titlesx, doc, null, XPathResult.ANY_TYPE, null); var links = doc.evaluate(linksx, doc, null, XPathResult.ANY_TYPE, null); var title; var link; while ((title = titles.iterateNext()) && (link = links.iterateNext())) { items[link.href] = Zotero.Utilities.trimInternal(title.textContent); } } items = Zotero.selectItems(items); for (var i in items) { arts.push(i); } } else { arts = [url]; } Zotero.Utilities.processDocuments(arts, function(doc) { var item = new Zotero.Item("journalArticle"); item.url = doc.location.href; var jour = item.url.match(/http:\/\/([^.]+)\./)[1]; item.publicationTitle = journalNames[jour][0]; item.ISSN = journalNames[jour][1]; item.title = Zotero.Utilities.trimInternal(doc.evaluate(''//h2[@class="title"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); var authors = Zotero.Utilities.trimInternal(doc.evaluate(''//p[@class="author"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); authors = authors.replace(/\d+/g, ""); authors = authors.split(/,\s+(and)?\s*/); for each (var aut in authors) { if ((aut != "") && (aut != "and")) { item.creators.push(Zotero.Utilities.cleanAuthor(aut, "author")); } } //get info var infos = doc.evaluate(''//p[@class="info"]'', doc, null, XPathResult.ANY_TYPE, null); var voliss = infos.iterateNext().textContent; var keys = infos.iterateNext().textContent; if (voliss.match(/([^\d]+)(\d+)\s+\((\d+)\)\s+([\d\-]+)/)) { voliss = voliss.match(/([^\d]+)(\d+)\s+\((\d+)\)\s+([\d\-]+)/); var x = 4 } else { voliss = voliss.match(/([^\d]+)(\d+)\s+\((\d+)\)\s+(pp\.)?\s+([\d\-]+)/); var x = 5 } item.journalAbbreviation = Zotero.Utilities.trimInternal(voliss[1]); item.volume = voliss[2]; item.date = voliss[3]; item.pages = voliss[x]; keys = Zotero.Utilities.trimInternal(keys); if (keys.match(/KEYWORDS/)) { keys = keys.match(/KEYWORDS:\s+(.*)URL:\s+(.*)DOI:\s+(.*)$/); var a = 1; var c = 3; } else { keys = keys.match(/URL:\s+(.*)DOI:\s+(.*)$/); var c = 2; } if (a) { item.tags = keys[a].split(/,\s+/); } item.DOI = keys[c]; item.abstractNote = Zotero.Utilities.trimInternal(doc.evaluate(''//p[@class="abstract"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); item.complete(); var pdfurl = doc.evaluate(''//a[contains(text(), "PDF")]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().href; item.attachments = [ {url:item.url, title:"IPAP Snapshot", mimeType:"text/html"} ]; }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('9e306d5d-193f-44ae-9dd6-ace63bf47689', '1.0.0b3r1', '', '2008-07-02 11:00:00', '1', '100', '4', 'IngentaConnect', 'Michael Berkowitz', 'http://(www.)?ingentaconnect.com', 'function detectWeb(doc, url) { if (url.indexOf("article?") != -1 || url.indexOf("article;") != -1 || url.indexOf("/art") != -1) { return "journalArticle"; } else if (url.indexOf("search?") !=-1 || url.indexOf("search;") != -1) { return "multiple"; } }', 'function doWeb(doc, url) { var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var artlink = ''//div//p/strong/a''; var links = doc.evaluate(artlink, doc, null, XPathResult.ANY_TYPE, null); var next_link; while (next_link = links.iterateNext()) { items[next_link.href] = next_link.textContent; } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.debug(articles); Zotero.Utilities.processDocuments(articles, function(newDoc) { var risurl = newDoc.evaluate(''//div[@id="export-formats"]/ul/li/a[@title="EndNote Export"]'', newDoc, null, XPathResult.ANY_TYPE, null).iterateNext().href; if (newDoc.evaluate(''//div[@id="abstract"]'', newDoc, null, XPathResult.ANY_TYPE, null).iterateNext()) var abs = Zotero.Utilities.trimInternal(newDoc.evaluate(''//div[@id="abstract"]'', newDoc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent).substr(10); if (newDoc.evaluate(''//div[@id="info"]/p[1]/a'', newDoc, null, XPathResult.ANY_TYPE, null).iterateNext()) { var keywords = newDoc.evaluate(''//div[@id="info"]/p[1]/a'', newDoc, null, XPathResult.ANY_TYPE, null); var key; var keys = new Array(); while (key = keywords.iterateNext()) { keys.push(Zotero.Utilities.capitalizeTitle(key.textContent)); } } Zotero.Utilities.HTTP.doGet(risurl, function(text) { text = text.replace(/(PY\s+\-\s+)\/+/, "$1"); text = text.replace(/ER\s\s\-/, "") + "\nER - "; var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { if (abs) item.abstractNote = abs; item.attachments = [{url:item.url, title:"IngentaConnect Snapshot", mimeType:"text/html"}]; if (keys) item.tags = keys; if (item.DOI) { if (item.DOI.match(/doi/)) { item.DOI = item.DOI.substr(4); } } item.complete(); }); translator.translate(); }); }, function() {Zotero.done;}); }'); REPLACE INTO translators VALUES ('636c8ea6-2af7-4488-8ccd-ea280e4a7a98', '1.0.0b4.r5', '', '2009-01-28 18:10:00', 1, 100, 4, 'Sage Journals Online', 'Michael Berkowitz', 'http://[^/]*\.sagepub\.com[^/]*/', 'function detectWeb(doc, url) { if (url.indexOf("searchresults") != -1 || (doc.title.indexOf("Table of Contents") != -1)) { return "multiple"; } else if (url.indexOf("cgi/content") != -1) { return "journalArticle"; } }', 'function doWeb(doc, url) { var arts = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); if (doc.title.indexOf("Table of Contents") != -1) { var searchx = ''//div[@id="maincontent"]/div[@class="contentarea"]/table[@class="toc"]/tbody/tr/td[2][@class="rightcol"]/form/dl/dd''; var titlex = ''.//strong''; } else { var searchx = ''//form[@id="search_results"]/div[@class="resultsitem"]/div[2]''; var titlex = ''.//label''; } var linkx = ''.//a[contains(@href, "abstract")]''; var searchres = doc.evaluate(searchx, doc, null, XPathResult.ANY_TYPE, null); var next_res; while (next_res = searchres.iterateNext()) { var title = doc.evaluate(titlex, next_res, null, XPathResult.ANY_TYPE, null).iterateNext().textContent; // sometimes there is no abstract, the search results returns an entire journal, I am skipping it silently var link = doc.evaluate(linkx, next_res, null, XPathResult.ANY_TYPE, null).iterateNext(); if (link) { items[link.href] = title; } } items = Zotero.selectItems(items); for (var i in items) { arts.push(i); } } else { arts = [url]; } var newurls = new Array(); for each (var i in arts) { newurls.push(i); } Zotero.Utilities.HTTP.doGet(arts, function(text) { var id = text.match(/=([^=]+)\">\s*Add to Saved Citations/)[1]; var newurl = newurls.shift(); var pdfurl = newurl.replace(/content\/[^/]+/, "reprint") + ".pdf"; if (pdfurl.indexOf("?") != -1) { pdfurl = pdfurl.substring(0,pdfurl.indexOf("?")) + ".pdf"; } Zotero.debug("pdf= "+pdfurl); var get = ''http://online.sagepub.com/cgi/citmgr?type=refman&gca='' + id; Zotero.Utilities.HTTP.doGet(get, function(text) { var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); if (text.match(/N1(.*)\n/)) { var doi = text.match(/N1\s+\-\s+(.*)\n/)[1]; } translator.setHandler("itemDone", function(obj, item) { item.attachments = [ {url:newurl, title:"Sage Journals Snapshot", mimeType:"text/html"}, {url:pdfurl, title:"Sage Journals Full Text PDF", mimeType:"application/pdf"} ]; if (doi) item.DOI = doi; if (item.notes) item.notes = []; item.complete(); }); translator.translate(); }); }); Zotero.wait(); }'); REPLACE INTO translators VALUES ('3eabecf9-663a-4774-a3e6-0790d2732eed', '1.0.0b4.r5', '', '2008-05-30 08:00:00', '1', '100', '4', 'SciELO', 'Michael Berkowitz', 'http://(www.)?scielo.(org|br)/', 'function detectWeb(doc, url) { if (url.indexOf("wxis.exe") != -1) { if (doc.evaluate(''//*[@class="isoref"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } } else if (url.indexOf("issuetoc") != -1) { return "multiple" } else if (url.indexOf("&pid=") != -1) { return "journalArticle"; } else { Zotero.debug("ok"); } }', 'function makeURL(host, str) { return ''http://www.scielo.br/scieloOrg/php/articleXML.php?pid='' + str.match(/pid=([^&]+)/)[1]; } function doWeb(doc, url) { var host = doc.location.host; var arts = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); if (url.indexOf(".exe") != -1) { var titlepath = ''//font[@class="isoref"]/font[@class="negrito"]''; var linkpath = ''//font[@class="isoref"]/a[@class="isoref"]''; } else { var titlepath = ''//font[@class="normal"]/b/b[1]''; var linkpath = ''//tr/td/div/a[1]''; } var titles = doc.evaluate(titlepath, doc, null, XPathResult.ANY_TYPE, null); var links = doc.evaluate(linkpath, doc, null, XPathResult.ANY_TYPE, null); var next_title; var next_link; while ((next_title = titles.iterateNext()) && (next_link = links.iterateNext())) { items[next_link.href] = next_title.textContent; } items = Zotero.selectItems(items); for (var i in items) { arts.push(makeURL(host, i)); } } else { arts = [makeURL(host, url)]; } Zotero.Utilities.HTTP.doGet(arts, function(text) { var item = new Zotero.Item("journalArticle"); text = text.replace(/<!DOCTYPE[^>]*>/, "").replace(/<\?xml[^>]*\?>/, "").replace(/<self-uri.*\/self\-uri>/g, ""); var journal = text.split("<journal-meta>")[1].split("</journal-meta>")[0]; journal = "<journal>" + journal + "</journal>"; journal = journal.replace(/\-([a-z])/g, "$1"); var xml2 = new XML(journal); var art = text.split("<article-meta>")[1].split("</article-meta>")[0]; art = "<article>" + art + "</article>"; art = art.replace(/\-([a-z])/g, "$1"); var xml3 = new XML(art); item.publicationTitle = xml2..journaltitle.text().toString(); item.journalAbbreviation = xml2..abbrevjournaltitle.text().toString(); item.ISSN = xml2..issn.text().toString(); item.publisher = xml2..publisher..publishername.text().toString(); item.title = xml3..titlegroup..articletitle.text().toString(); for (var i = 0 ; i < xml3..contribgroup..contrib.length() ; i++) { var name = xml3..contribgroup..contrib[i]..name; item.creators.push({firstName:name..givennames.text().toString(), lastName:name..surname.text().toString(), creatorType:"author"}); } var date = xml3..pubdate[0]; var day = date..day.text().toString(); var month = date..month.text().toString(); var year = date..year.text().toString(); date = year; if (month != "00") { date = month + "/" + date; } if (day != "00") { date = day + "/" + date; } item.date = date; item.volume = xml3..volume.text().toString(); item.pages = xml3..fpage.text().toString() + "-" + xml3..lpage.text().toString(); for (var i = 0 ; i < xml3..kwdgroup..kwd.length() ; i++) { item.tags.push(xml3..kwdgroup..kwd[i].text().toString()); } item.attachments = [ {url:url, title:"SciELO Snapshot", mimeType:"text/html"} ]; item.complete(); }); }'); REPLACE INTO translators VALUES ('0a84a653-79ea-4c6a-8a68-da933e3b504a', '1.0.0b4.r5', '', '2008-03-28 16:30:00', '0', '100', '4', 'Alexander Street Press', 'John West and Michael Berkowitz', 'http://(?:www\.)alexanderstreet', 'function detectWeb(doc, url) { if( url.indexOf("object.details.aspx") != -1 ) { var zitemtype = doc.getElementById("ctl00_ctl00_MasterContentBody_ContentPlaceHolder1_txtZType").value; switch (zitemtype.toLowerCase()) { case "book": return "book"; break; case "chapter": return "bookSection"; break; case "journal": return "journalArticle"; break; case "manuscript": return "manuscript"; break; case "audio": return "audioRecording"; break; case "video": return "videoRecording"; break; case "issue": return "journalArticle"; break; case "article": return "journalArticle"; break; case "series": return "interview"; break; case "session": return "interview"; break; default: return "document"; } } else if (url.indexOf("results.aspx") != -1) { return "multiple"; } }', 'function scrape(doc, url) { // set prefix for serverside control var p = "ctl00_ctl00_MasterContentBody_ContentPlaceHolder1_txtZ"; // get values from hidden inputs var ztype = GetItemType(doc.getElementById(p+"Type").value); var ztitle = doc.getElementById(p+"Title").value; var zbooktitle = doc.getElementById(p+"BookTitle").value; var znotes = doc.getElementById(p+"Notes").value; var zurl = doc.getElementById(p+"URL").value; var zrights = doc.getElementById(p+"Rights").value; var zseries = doc.getElementById(p+"Series").value; var zvolume = doc.getElementById(p+"Volume").value; var zissue = doc.getElementById(p+"Issue").value; var zedition = doc.getElementById(p+"Edition").value; var zplace = doc.getElementById(p+"Place").value; var zpublisher = doc.getElementById(p+"Publisher").value; var zpages = doc.getElementById(p+"Pages").value; var zrepository = doc.getElementById(p+"Repository").value; var zlabel = doc.getElementById(p+"Label").value; var zrunningTime = doc.getElementById(p+"RunningTime").value; var zlanguage = doc.getElementById(p+"Language").value; var zauthor = doc.getElementById(p+"Author").value; var zeditor = doc.getElementById(p+"Editor").value; var ztranslator = doc.getElementById(p+"Translator").value; var zinterviewee = doc.getElementById(p+"Interviewee").value; var zinterviewer = doc.getElementById(p+"Interviewer").value; var zrecipient = doc.getElementById(p+"Recipient").value; var zdirector = doc.getElementById(p+"Director").value; var zscriptwriter = doc.getElementById(p+"ScriptWriter").value; var zproducer = doc.getElementById(p+"Producer").value; var zcastMember = doc.getElementById(p+"CastMember").value; var zperformer = doc.getElementById(p+"Performer").value; var zcomposer = doc.getElementById(p+"Composer").value; // create Zotero item var newArticle = new Zotero.Item(ztype); // populate Zotero item newArticle.title = ztitle; newArticle.bookTitle = zbooktitle; newArticle.notes = znotes; newArticle.url = zurl; newArticle.place = zplace; newArticle.publisher = zpublisher; newArticle.pages = zpages; newArticle.rights = zrights; newArticle.series = zseries; newArticle.volume = zvolume; newArticle.issue = zissue; newArticle.edition = zedition; newArticle.repository = zrepository; newArticle.label = zlabel; newArticle.runningTime = zrunningTime; newArticle.language = zlanguage; newArticle.editor = zeditor; newArticle.translator = ztranslator; newArticle.interviewee = zinterviewee; newArticle.interviewer = zinterviewer; newArticle.recipient = zrecipient; newArticle.director = zdirector; newArticle.scriptwriter = zscriptwriter; newArticle.producer = zproducer; newArticle.castMember = zcastMember; newArticle.performer = zperformer; newArticle.composer = zcomposer; var aus = zauthor.split(";"); for (var i=0; i< aus.length ; i++) { newArticle.creators.push(Zotero.Utilities.cleanAuthor(aus[i], "author", true)); } newArticle.attachments = [{url:doc.location.href, title:"Alexander Street Press Snapshot", mimeType:"text/html"}]; if (doc.evaluate(''//a[contains(@href, "get.pdf")]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { var pdfurl = doc.evaluate(''//a[contains(@href, "get.pdf")]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().href; newArticle.attachments.push({url:pdfurl, title:"Alexander Street Press PDF", mimeType:"application/pdf"}); } else if (doc.evaluate(''//a[contains(@href, "get.jpg")]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { var imgurl = doc.evaluate(''//a[contains(@href, "get.jpg")]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().href.replace(/.{2}$/, "01"); newArticle.attachments.push({url:imgurl, title:"Alexander Street Press Pg 1", mimeType:"image/jpg"}); newArticle.notes = [{note:"Further page images can be found by following the URL of the ''Alexander Street Press Pg 1'' attachment and iterating the final digits of the URL"}]; } // save Zotero item newArticle.complete(); } function GetItemType(zitemtype) { switch (zitemtype.toLowerCase()) { case "book": return "book"; break; case "chapter": return "bookSection"; break; case "journal": return "journalArticle"; break; case "manuscript": return "manuscript"; break; case "audio": return "audioRecording"; break; case "video": return "videoRecording"; break; case "issue": return "journalArticle"; break; case "article": return "journalArticle"; break; case "series": return "interview"; break; case "session": return "interview"; break; default: return "document"; } } function doWeb(doc, url) { var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var xpath = ''//tbody/tr/td[2][@class="data"]/a[1]''; var titles = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null); var next_title; while (next_title = titles.iterateNext()) { items[next_title.href] = next_title.textContent; } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done;}); }'); REPLACE INTO translators VALUES ('0abd577b-ec45-4e9f-9081-448737e2fd34', '1.0.0b4.r5', '', '2008-06-06 08:45:00', '0', '100', '4', 'DSpace', 'Michael Berkowitz', '(dspace|upcommons.upc.edu)', 'function detectWeb(doc, url) { if (doc.evaluate(''//table[@class="itemDisplayTable"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "document"; } else if (doc.evaluate(''//table[@class="miscTable"]//td[2]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext() || doc.evaluate(''//div[@id="main"]/ul[@class="browselist"]/li/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } }', 'var itemTypes = { "Article":"journalArticle", "Book":"book", "Thesis":"thesis", "Working Paper":"report", "Technical Report":"report" } function doWeb(doc, url) { var records = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); if (doc.evaluate(''//div[@id="main"]/ul[@class="browselist"]/li/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { var xpath = ''//div[@id="main"]/ul[@class="browselist"]/li/a''; } else { var xpath = ''//table[@class="miscTable"]//td[2]//a''; } var rows = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null); var row; while (row = rows.iterateNext()) { items[row.href] = row.textContent; } items = Zotero.selectItems(items); for (var i in items) { records.push(i + ''?mode=full''); } } else { records = [url.match(/^([^?]+)\??/)[1] + "?mode=full"]; } Zotero.Utilities.processDocuments(records, function(newDoc) { var values = new Object(); var fields = newDoc.evaluate(''//table[@class="itemDisplayTable"]/tbody/tr/td[1]'', newDoc, null, XPathResult.ANY_TYPE, null); var data = newDoc.evaluate(''//table[@class="itemDisplayTable"]/tbody/tr/td[2]'', newDoc, null, XPathResult.ANY_TYPE, null); var field2; var datum2; var newItem = new Zotero.Item(); while ((field2 = fields.iterateNext()) && (datum2 = data.iterateNext())) { var field = field2.textContent.replace(/^dc\./, ""); var datum = datum2.textContent; if (field == "contributor.author") { var name = datum.split(","); newItem.creators.push({firstName:name[1], lastName:name[0], creatorType:"author"}); } else if (field == "dentifier.uri") { newItem.url = datum; } else if (field == "title") { newItem.title = datum; } else if (field == "type") { if (itemTypes[datum]) { newItem.itemType = itemTypes[datum]; } else { newItem.itemType = "document"; } } else if (field == "description.abstract") { newItem.abstractNote = datum; } else if (field == "date.available") { newItem.date = datum.replace(/T.*$/, ""); } else if (field == "subject") { newItem.tags.push(datum); } else if (field == "publisher") { newItem.publisher = datum; } else if (field == "identifier.issn") { newItem.ISSN = datum; } else if (field == "relation.ispartofseries") { if (datum.match(/Vol/)) { newItem.volume = datum.match(/\d+/)[0]; } else if (datum.match(/No/)) { newItem.issue = datum.match(/\d+/)[0]; } } else if (field == "rights") { newItem.rights = datum; } } if (newDoc.evaluate(''//td[@class="standard"]/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) var pdf = newDoc.evaluate(''//td[@class="standard"]/a'', newDoc, null, XPathResult.ANY_TYPE, null).iterateNext().href; newItem.attachments = [{url:newDoc.location.href, title:"DSpace Snapshot", mimeType:"text/html"}]; if (pdf) { newItem.attachments.push({url:pdf, title:"DSpace PDF", mimeType:"application/pdf"}); } newItem.complete(); }, function() {Zotero.done;}); }'); REPLACE INTO translators VALUES ('7987b420-e8cb-4bea-8ef7-61c2377cd686', '1.0.0b4.r1', '', '2008-02-06 20:00:00', '0', '100', '4', 'NASA ADS', 'Asa Kusuma and Ramesh Srigiriraju', 'http://(ukads|cdsads|ads|adsabs|esoads|adswww|www.ads)\.(inasan|iucaa.ernet|nottingham.ac|harvard|eso|u-strasbg|nao.ac|astro.puc|bao.ac|on|kasi.re|grangenet|lipi.go|mao.kiev)\.(edu|org|net|fr|jp|cl|id|uk|cn|ua|in|ru|br|kr)/(?:cgi-bin|abs)/', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var singXpath = ''//input[@name="bibcode"][@type="hidden"]''; var multXpath = ''//input[@name="bibcode"][@type="checkbox"]''; if (doc.evaluate(multXpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else if (doc.evaluate(singXpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){ return "journalArticle"; } }', 'function parseRIS(bibcodes, hostname){ var getURL = "http://" + hostname + "/cgi-bin/nph-bib_query?" + bibcodes + "data_type=REFMAN&nocookieset=1"; Zotero.Utilities.HTTP.doGet(getURL, function(text){ // load translator for RIS var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.translate(); Zotero.done(); }, function() {}); Zotero.wait(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var singXpath = ''//input[@name="bibcode"][@type="hidden"]''; var multXpath = ''//input[@name="bibcode"][@type="checkbox"]''; var titleXpath = ''//table/tbody/tr/td[4]''; //will find scores and titles var hostname = doc.location.host var bibElmts = doc.evaluate(multXpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var titleElmts = doc.evaluate(titleXpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var titleElmt; var bibElmt; if ((bibElmt = bibElmts.iterateNext()) && (titleElmt = titleElmts.iterateNext())) { var items = new Array(); do { titleElmt = titleElmts.iterateNext(); //iterate a second time to avoid score items[bibElmt.value] = Zotero.Utilities.cleanString(titleElmt.textContent); } while((bibElmt = bibElmts.iterateNext()) && (titleElmt = titleElmts.iterateNext())); items = Zotero.selectItems(items); if(!items) return true; var bibcodes=""; for(var bibcode in items) { bibcodes = bibcodes + "bibcode="+encodeURIComponent(bibcode) + "&"; } parseRIS(bibcodes, hostname); } else if (bibElmt = doc.evaluate(singXpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){ var bibcode = bibElmt.value; var bibcodes = "bibcode="+encodeURIComponent(bibcode) + "&"; parseRIS(bibcodes, hostname); } }'); REPLACE INTO translators VALUES ('99f958ab-0732-483d-833f-6bd8e42f6277', '1.0.0b4.r1', '', '2008-05-05 07:45:00', '0', '100', '4', 'National Bureau of Economic Research', 'Michael Berkowitz', '^https?://(?:papers\.|www\.)?nber\.org/(papers|s|new)', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; if (doc.evaluate(''//a[contains(text(), "RIS")]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { return "journalArticle"; } else if (doc.evaluate(''//div[@class="maintd"][@id="maine"]/table/tbody/tr/td[1]//a[contains(@href, "papers/w")]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } }', 'function parseRIS(uris){ Zotero.Utilities.HTTP.doGet(uris, function(text){ // load translator for RIS var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.translate(); Zotero.done(); }, function() {}); Zotero.wait(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var arts = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var links = doc.evaluate(''//div[@class="maintd"][@id="maine"]/table/tbody/tr/td[1]//a[contains(@href, "papers/w")]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var link; while (link = links.iterateNext()) { if (!link.href.match(/\.pdf$/)) items[link.href] = link.textContent; } items = Zotero.selectItems(items); for (var i in items) { arts.push(i + ''.ris''); } } else { arts = [url + ''.ris'']; } Zotero.Utilities.HTTP.doGet(arts, function(text) { var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { if (text.match(/AB\s+\-\s+/)) item.abstractNote = text.match(/AB\s+\-\s+((.|\s)+)\n([A-Z]{2})/)[1]; item.notes = new Array(); item.complete(); }); translator.translate(); }); Zotero.wait(); }'); REPLACE INTO translators VALUES ('411f9a8b-64f3-4465-b7df-a3c988b602f3', '1.0.0b4.r1', '', '2007-06-26 15:17:22', '0', '100', '4', 'RePEc', 'Asa Kusuma', '^https?://ideas\.repec\.org/', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var singXpath = ''//html/body/a/table/tbody/tr/td/font/b''; var multXpath = ''//html/body/h2''; if (doc.evaluate(multXpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { if(doc.evaluate(multXpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.indexOf("Search")!=-1) return "multiple"; } else if(doc.evaluate(singXpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { return "journalArticle"; } }', 'function strrev(str) { if (!str) return ''''; var revstr=''''; for (i = str.length-1; i>=0; i--) revstr+=str.charAt(i) return revstr; } function parseRIS(uris) { Zotero.Utilities.HTTP.doGet(uris, function(text){ // load translator for RIS var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.translate(); Zotero.done(); }, function() {}); Zotero.wait(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var singXpath = ''//html/body/a/table/tbody/tr/td/font/b''; var multXpath = ''//html/body/h2''; if (doc.evaluate(multXpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { if(doc.evaluate(multXpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.indexOf("Search")!=-1) shortXpath = ''//html/body/strong/a''; longXpath = ''//html/body/dl/dt/strong/a''; var multXpath=''''; if(doc.evaluate(shortXpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { multXpath=shortXpath; } else { multXpath=longXpath; } var bibElmts = doc.evaluate(multXpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var titleElmts = doc.evaluate(multXpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var titleElmt; var bibElmt; bibElmt = bibElmts.iterateNext(); titleElmt = titleElmts.iterateNext(); var items = new Array(); do { var bibcode = bibElmt.href; bibcode=bibcode.substr(24); bibcode=strrev(bibcode); bibcode=bibcode.substr(5,bibcode.length); bibcode=strrev(bibcode); //Replace slashes with colons bibcode=bibcode.replace("/",":","g"); //Insert colons between numbers and letters and letters and numbers bibcode=bibcode.replace(/([A-Za-z])([0-9])/g, function (str, p1, p2, offset, s) { return p1 + ":" + p2; } ) bibcode=bibcode.replace(/([0-9])([A-Za-z])/g, function (str, p1, p2, offset, s) { return p1 + ":" + p2; } ) items[bibcode] = Zotero.Utilities.cleanString(titleElmt.textContent); } while((bibElmt = bibElmts.iterateNext()) && (titleElmt = titleElmts.iterateNext())); items = Zotero.selectItems(items); if(!items) return true; var bibcodes=""; var uris = new Array(); for(var bibcode in items) { var getURL = "http://ideas.repec.org/cgi-bin/ref.cgi?handle=RePEc"; getURL = getURL + bibcode + "&output=3"; uris.push(getURL); } parseRIS(uris); } else if(doc.evaluate(singXpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var bibcode = url; bibcode=bibcode.substr(24); bibcode=strrev(bibcode); bibcode=bibcode.substr(5,bibcode.length); bibcode=strrev(bibcode); //Replace slashes with colons bibcode=bibcode.replace("/",":","g"); //Insert colons between numbers and letters and letters and numbers bibcode=bibcode.replace(/([A-Za-z])([0-9])/g, function (str, p1, p2, offset, s) { return p1 + ":" + p2; } ) bibcode=bibcode.replace(/([0-9])([A-Za-z])/g, function (str, p1, p2, offset, s) { return p1 + ":" + p2; } ) var getURL = "http://ideas.repec.org/cgi-bin/ref.cgi?handle=RePEc"; getURL = getURL + bibcode + "&output=3"; var idarray = new Array(); idarray.push(getURL); parseRIS(idarray); } }'); REPLACE INTO translators VALUES ('e4660e05-a935-43ec-8eec-df0347362e4c', '1.0.0b4.r1', '', '2008-12-15 05:30:00', 1, 100, 4, 'ERIC', 'Ramesh Srigiriraju', '^http://(?:www\.)?eric\.ed\.gov/', 'function detectWeb(doc, url) { var namespace=doc.documentElement.namespaceURI; var nsResolver=namespace?function(prefix) { return (prefix=="x")?namespace:null; }:null; var searchpath=''//form[@name="searchResultsForm"][@id="searchResultsForm"]''; if(doc.evaluate(searchpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) return "multiple"; //var singpath=''//tr/td[@class="primaryHeader"][contains(text(), "Record Details")]''; var singpath=''contains(//div[@id="titleBarBlue"]/text(), "Record Details")''; if(doc.evaluate(singpath, doc, nsResolver, XPathResult.ANY_TYPE, null).booleanValue) { var typepath=''//tr[td/span/strong/text()="Pub Types:"]/td[2]/text()''; var typestr=doc.evaluate(typepath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().nodeValue; var typereg=new RegExp("([^;/\-]+)"); var typearr=typereg.exec(typestr); if(typearr[1]=="Journal Articles") return "journalArticle"; if(typearr[1]=="Information Analyses") return "journalArticle"; if(typearr[1]="Machine") return "computerProgram"; if(typearr[1]="Computer Programs") return "computerProgram"; if(typearr[1]="Dissertations") return "thesis"; if(typearr[1]="Reports") return "report"; if(typearr[1]="Non") return "audioRecording"; if(typearr[1]="Legal") return "statute"; else return "book"; } }', 'function doWeb(doc, url) { var namespace=doc.documentElement.namespaceURI; var nsResolver=namespace?function(prefix) { return (prefix=="x")?namespace:null; }:null; var searchpath=''//form[@name="searchResultsForm"][@id="searchResultsForm"]''; if(doc.evaluate(searchpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var string="http://eric.ed.gov/ERICWebPortal/custom/portlets/clipboard/performExport.jsp"; var idpath=''//a[img]/@id''; var ids=doc.evaluate(idpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var items=new Array(); var titlpath=''//tr[1]/td[1]/p/a''; var titlerows=doc.evaluate(titlpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var id; while(id=ids.iterateNext()) items[id.nodeValue]=Zotero.Utilities.cleanTags(Zotero.Utilities.cleanString(titlerows.iterateNext().textContent)); items=Zotero.selectItems(items); var string="http://eric.ed.gov/ERICWebPortal/custom/portlets/clipboard/performExport.jsp?"; for(var ids in items) string+="accno="+ids+"&"; string+="texttype=endnote&citationtype=brief&Download.x=86&Download.y=14"; Zotero.Utilities.HTTP.doGet(string, function(text) { var trans=Zotero.loadTranslator("import"); trans.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); trans.setString(text); trans.setHandler("itemDone", function(obj, newItem) { var linkpath=''//tbody[tr/td/a/@id="''+newItem.itemID+''"]/tr/td/p/a[@class="action"]''; var link=doc.evaluate(linkpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if(link) newItem.attachments.push({url:link.href, title:newItem.title, mimeType:"application/pdf"}); newItem.complete(); }); trans.translate(); Zotero.done(); }); Zotero.wait(); } var singpath=''contains(//div[@id="titleBarBlue"]/text(), "Record Details")''; if(doc.evaluate(singpath, doc, nsResolver, XPathResult.ANY_TYPE, null).booleanValue) { var idpath=''//input[@type="hidden"][@name="accno"]/@value''; var idpath2=''//meta[@name="eric #"]/@content''; var id = url.match(/accno=([^&]+)/)[1]; var string="http://eric.ed.gov/ERICWebPortal/custom/portlets/clipboard/performExport.jsp?accno="; string+= id+"&texttype=endnote&citationtype=brief&Download.x=86&Download.y=14"; Zotero.Utilities.HTTP.doGet(string, function(text) { var trans=Zotero.loadTranslator("import"); trans.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); trans.setString(text); trans.setHandler("itemDone", function(obj, newItem) { var linkpath=''//tr/td/p[img/@alt="PDF"]/a''; var link=doc.evaluate(linkpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if(link) newItem.attachments.push({url:link.href, title:newItem.title, mimeType:"application/pdf"}); newItem.complete(); }); trans.translate(); Zotero.done(); }); Zotero.wait(); } }'); REPLACE INTO translators VALUES ('5dd22e9a-5124-4942-9b9e-6ee779f1023e', '1.0.0b4.r5', '', '2009-01-28 18:10:00', 1, 100, 4, 'Flickr', 'Sean Takats', '^http://(?:www\.)?flickr\.com/', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; if (elmt = doc.evaluate(''//h1[@property="dc:title" and starts-with(@id, "title_div")]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){ return "artwork"; } else if (doc.evaluate(''//td[@class="DetailPic"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){ return "multiple"; } else if (doc.evaluate(''//div[contains(@class, "StreamView")]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){ return "multiple"; } else if (doc.evaluate(''//div[@id="setThumbs"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){ if (!doc.URL.match(''/comments/'')) { return "multiple"; } } else if (doc.evaluate(''//p[@class="StreamList" or @class="UserTagList"]/span/a'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){ return "multiple"; } }', 'function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var items = new Object(); var photo_ids = new Array(); var uris = new Array(); var key = "3cde2fca0879089abf827c1ec70268b5"; var elmts; var elmt; // single result if (elmt = doc.evaluate(''//h1[@property="dc:title" and starts-with(@id, "title_div")]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){ var photo_id = elmt.id; photo_id = photo_id.substr(9); photo_ids.push(photo_id); } else { //multiple results var photoRe = /\/photos\/[^\/]*\/([0-9]+)\//; //search results if (doc.evaluate(''//td[@class="DetailPic"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){ elmts = doc.evaluate(''//td[@class="DetailPic"]//a'', doc, nsResolver, XPathResult.ANY_TYPE, null); while (elmt = elmts.iterateNext()){ var title = elmt.title; title = Zotero.Utilities.trimInternal(title); var link = elmt.href; var m = photoRe(link); var photo_id = m[1]; items[photo_id] = title; } // photo stream } else if (doc.evaluate(''//div[contains(@class, "StreamView")]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){ if (doc.evaluate(''//div[contains(@class, "StreamView") and starts-with(@id, "sv_title_")]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { elmts = doc.evaluate(''//div[contains(@class, "StreamView") and starts-with(@id, "sv_title_")]'', doc, nsResolver, XPathResult.ANY_TYPE, null); } else { elmts = doc.evaluate(''//div[contains(@class, "StreamView") and starts-with(@id, "sv_body_")]'', doc, nsResolver, XPathResult.ANY_TYPE, null); } while (elmt = elmts.iterateNext()){ //var title = Zotero.Utilities.trimInternal(elmt.textContent); var title = elmt.getElementsByTagName("h4")[0].textContent var photo_id = elmt.id; photo_id = photo_id.replace(/(sv_body_|sv_title_)/,''''); Zotero.debug("id="+photo_id) items[photo_id] = title; } // photo set } else if (doc.evaluate(''//div[@class="setThumbs-indv"]/span'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){ elmts = doc.evaluate(''//div[@class="setThumbs-indv"]/span'', doc, nsResolver, XPathResult.ANY_TYPE, null); while (elmt = elmts.iterateNext()){ var title = doc.evaluate(''./a/@title'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; var photo_id = elmt.id.substr(11); items[photo_id] = title; } // tagged with } else if (doc.evaluate(''//p[@class="StreamList" or @class="UserTagList"]/span/a'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){ var elmts = doc.evaluate(''//p[@class="StreamList" or @class="UserTagList"]//a[img]'', doc, nsResolver, XPathResult.ANY_TYPE, null); while (elmt = elmts.iterateNext()){ var title = Zotero.Utilities.trimInternal(elmt.title); var link = elmt.href; var m = photoRe(link); var photo_id = m[1]; items[photo_id] = title; } } items = Zotero.selectItems(items); if(!items) return true; for(var i in items) { photo_ids.push(i); } } for each(var photo_id in photo_ids){ uris.push("http://api.flickr.com/services/rest/?method=flickr.photos.getInfo&api_key="+key+"&photo_id="+photo_id); } Zotero.Utilities.HTTP.doGet(uris, function(text) { text = text.replace(/<\?xml[^>]*\?>/, ""); var xml = new XML(text); var newItem = new Zotero.Item("artwork"); var title = ""; if (xml..title.length()){ var title = Zotero.Utilities.cleanString(xml..title[0].text().toString()); if (title == ""){ title = " "; } newItem.title = title; } for(var i=0; i<xml..tag.length(); i++) { newItem.tags.push(Zotero.Utilities.cleanString(xml..tag[i].text().toString())); } if (xml..dates.length()){ var date = xml..dates[0].@taken.toString(); newItem.date = date.substr(0, 10); } if (xml..owner.length()){ var author = xml..owner[0].@realname.toString(); if (author == ""){ author = xml..owner[0].@username.toString(); } newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "artist")); } if (xml..url.length()){ newItem.url = xml..url[0].text().toString(); } if (xml..description.length()){ newItem.abstractNote = xml..description[0].text().toString(); } var format = xml..photo[0].@originalformat.toString(); var photo_id = xml..photo[0].@id.toString(); // get attachment code var uri = "http://api.flickr.com/services/rest/?method=flickr.photos.getSizes&api_key="+key+"&photo_id="+photo_id; Zotero.Utilities.HTTP.doGet(uri, function(text) { text = text.replace(/<\?xml[^>]*\?>/, ""); var xml = new XML(text); var last = xml..size.length() - 1; var attachmentUri = xml..size[last].@source.toString(); newItem.attachments = [{title:title, url:attachmentUri}]; newItem.complete(); }, function(){Zotero.done();}); }); Zotero.wait(); }'); REPLACE INTO translators VALUES ('d3b1d34c-f8a1-43bb-9dd6-27aa6403b217', '1.0.0rc4', '', '2009-02-25 07:15:00', 1, 100, 4, 'YouTube', 'Sean Takats and Michael Berkowitz and Matt Burton', 'https?://[^/]*youtube\.com\/', 'function detectWeb(doc, url){ var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var xpath = ''//input[@type="hidden" and @name="video_id"]''; if(doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { return "videoRecording"; } //Search results if (doc.evaluate(''//div[@class="video-long-title"]/a[contains(@href, "/watch?v=")]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){ return "multiple"; } //playlists if (doc.evaluate(''//div[starts-with(@class, "title")]/a[contains(@href, "/watch?v=")]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){ return "multiple"; } // still used? if (doc.evaluate(''//div[@class="vltitle"]/div[@class="vlshortTitle"]/a[contains(@href, "/watch?v=")]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){ return "multiple"; } }', 'function doWeb(doc, url){ var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var host = doc.location.host; var video_ids = new Array(); var xpath = ''//input[@type="hidden" and @name="video_id"]''; var elmts; var elmt; elmts = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null); elmt = elmts.iterateNext(); if(elmt) { //single video var video_id = elmt.value; video_ids.push(video_id); } else { // multiple videos var items = new Object(); var videoRe = /\/watch\?v=([a-zA-Z0-9-_]+)/; // search results and community/user pages if (elmt = doc.evaluate(''//div[@class="video-long-title"]/a[contains(@href, "/watch?v=")]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){ elmts = doc.evaluate(''//div[@class="video-long-title"]/a[contains(@href, "/watch?v=")]'', doc, nsResolver, XPathResult.ANY_TYPE, null); } // playlists else if (doc.evaluate(''//div[starts-with(@class, "title")]/a[contains(@href, "/watch?v=")]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){ elmts = doc.evaluate(''//div[starts-with(@class, "title")]/a[contains(@href, "/watch?v=")]'', doc, nsResolver, XPathResult.ANY_TYPE, null); } // still used? else if (doc.evaluate(''//div[@class="vltitle"]/div[@class="vlshortTitle"]/a[contains(@href, "/watch?v=")]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){ elmts = doc.evaluate(''//div[@class="vltitle"]/div[@class="vlshortTitle"]/a[contains(@href, "/watch?v=")]'', doc, nsResolver, XPathResult.ANY_TYPE, null); } while (elmt = elmts.iterateNext()){ var title = elmt.textContent; title = Zotero.Utilities.trimInternal(title); var link = elmt.href; var m = videoRe(link); var video_id = m[1]; items[video_id] = title; } items = Zotero.selectItems(items); if(!items) return true; for(var i in items) { video_ids.push(i); } } getData(video_ids, host); } function getData(ids, host){ var uris = new Array(); var url = "http://gdata.youtube.com/feeds/videos/"; for each(var id in ids){ uris.push(url+id); } Zotero.Utilities.HTTP.doGet(uris, function(text) { // clean up header text = text.replace(/<\?xml[^>]*\?>/, ""); text = text.replace(/<entry[^>]*>/, "<entry>"); // replace colons in XML tags text = text.replace(/<media:/g, "<media_").replace(/<\/media:/g, "</media_"); // text = text.replace(/<yt:/g, "<yt_").replace(/<\/yt:/g, "</yt_"); text = text.replace(/yt:/g, "yt_"); text = text.replace(/<gd:/g, "<gd_").replace(/<\/gd:/g, "</gd_"); text = text.replace(/<\/?(georss|gml)[^>]+>/g, ""); // pad xml text = "<zotero>"+text+"</zotero>"; var xml = new XML(text); var newItem = new Zotero.Item("videoRecording"); var title = ""; var title = xml..media_title[0].text().toString(); if (xml..media_title.length()){ var title = Zotero.Utilities.trimInternal(xml..media_title[0].text().toString()); if (title == ""){ title = " "; } newItem.title = title; } if (xml..media_keywords.length()){ var keywords = xml..media_keywords[0].text().toString(); keywords = keywords.split(","); for each(var tag in keywords){ newItem.tags.push(Zotero.Utilities.trimInternal(tag)); } } if (xml..published.length()){ var date = xml..published[0].text().toString(); newItem.date = date.substr(0, 10); } if (xml..author.name.length()){ var author = xml..author.name[0].text().toString(); newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "contributor", true)); } if (xml..media_player.length()){ var url = xml..media_player[0].@url.toString(); newItem.url = url; newItem.attachments.push({title:"YouTube Link", snapshot:false, mimeType:"text/html", url:url}); } if (xml..yt_duration.length()){ var runningTime = xml..yt_duration[0].@seconds.toString(); newItem.runningTime = runningTime + " seconds"; } if (xml..media_description.length()){ newItem.abstractNote = xml..media_description[0].text().toString(); } /* //temporary fix for downloads using techcrunch var techcrunchurl = "http://www.techcrunch.com/ytdownload3.php?url="+encodeURIComponent(newItem.url)+"&submit=Get+Video"; Zotero.debug(techcrunchurl); Zotero.Utilities.HTTP.doGet(techcrunchurl, function(text) { var flv = text.match(/HREF=''([^'']+)''/); if (flv[1]){ flv = flv[1]; // title parameter needs to be encoded var title = flv.match(/&title=([^&]+)/); if (title[1]){ title = encodeURIComponent(title[1]); flv = flv.replace(/&title=([^&]+)/, title); } newItem.attachments.push({url:flv, title:"YouTube Video Recording", mimeType:"video/x-flv"}); } newItem.complete(); }, function() {Zotero.done();}); */ newItem.complete(); Zotero.done(); }); Zotero.wait(); }'); REPLACE INTO translators VALUES ('e16095ae-986c-4117-9cb6-20f3b7a52f64', '1.0.0b4.r5', '', '2008-02-19 17:00:00', '0', '100', '4', 'Protein Data Bank', 'Michael Berkowitz', 'http://www.pdb.org/', 'function detectWeb(doc, url) { if (doc.title.indexOf("Query Results") != -1) { return "multiple"; } else if (url.indexOf("structureId") != -1) { return "journalArticle"; } }', 'function doWeb(doc, url) { var proteins = new Array(); if (detectWeb(doc, url) == "multiple") { //search results var items = new Object(); var xpath = ''//a[@class="qrb_title"]''; var titles = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null); var next_title; while (next_title = titles.iterateNext()) { items[next_title.href.match(/structureId=(.*)/)[1]] = next_title.textContent; } items = Zotero.selectItems(items); for (var i in items) { proteins.push(i); } } else { proteins = [url.match(/structureId=(.*)/)[1]]; } Zotero.debug(proteins); for (var p in proteins) { var xmlstr = ''http://www.pdb.org/pdb/download/downloadFile.do?fileFormat=xml&headerOnly=YES&structureId='' + proteins[p]; Zotero.debug(xmlstr); Zotero.Utilities.HTTP.doGet(xmlstr, function(text) { var item = new Zotero.Item("journalArticle"); text = text.replace(/<!DOCTYPE[^>]*>/, "").replace(/<\?xml[^>]*\?>/, "").replace(/PDBx\:/g, ""); var article = text.split(''<citation id="primary">''); var art = article[1].split(/<\/citation>\n/); art = "<citation>" + art[0] + "</citation>"; var xml = new XML(art); var info = text.split(''<database_PDB_revCategory>'')[1].split(''</database_PDB_revCategory>'')[0]; var xml2 = new XML("<PDB_revCategory>" + info + "</PDB_revCategory>"); var aus = text.split(''<citation_authorCategory>'')[1].split(''</citation_authorCategory>'')[0]; aus = "<authors>" + aus + "</authors>"; var xml3 = new XML(aus); item.title = xml..title.text().toString(); item.publicationTitle = xml..journal_abbrev.text().toString(); item.volume = xml..journal_volume.text().toString(); item.pages = xml..page_first.text().toString() + "-" + xml..page_last.text().toString(); item.ISSN = xml..journal_id_ISSN.text().toString(); item.extra = "PubMed ID: " + xml..pdbx_database_id_PubMed.text().toString(); if (xml..pdbx_database_id_DOI.length()) { item.DOI = xml..pdbx_database_id_DOI.text().toString(); } item.date = xml2..date_original.text().toString(); item.url = ''http://www.pdb.org/pdb/explore/explore.do?structureId='' + xml2..replaces.text().toString(); var authors = xml3..citation_author.toString().split(/\n/); for (var i in authors) { var name = authors[i].match(/name=\"([^"]+)\"/)[1].split(", ");; Zotero.debug(name); item.creators.push({firstName:name[1], lastName:name[0], creatorType:"author"}); } item.attachments = [ {url:item.url, title:"PDB Snapshot", mimeType:"text/html"}, {url:''http://www.pdb.org/pdb/download/downloadFile.do?fileFormat=pdb&compression=NO&structureId='' + proteins[p], title:"Protein Data Bank .pdb File", mimeType:"chemical/x-pdb"} ] item.complete(); }); Zotero.done; } Zotero.wait(); }'); REPLACE INTO translators VALUES ('0a01d85e-483c-4998-891b-24707728d83e', '1.0.0b4.r5', '', '2008-02-14 23:15:00', '0', '100', '4', 'AJHG', 'Michael Berkowitz', 'http://(www.)?ajhg.org/', 'function detectWeb(doc, url) { if (doc.evaluate(''//div[@class="article_links"]/a[1]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else if (url.indexOf("abstract") != -1 || url.indexOf("fulltext") != -1) { return "journalArticle"; } }', 'function getID(str) { str = str.match(/\/([^/]+)$/)[1]; if (str.indexOf("#") != -1) { str = str.substr(0, str.length - 1); } return str; } function doWeb(doc, url) { var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); if (doc.title.indexOf("Search Results") != -1) { var xpath = ''//table[@id="search_results"]/tbody/tr/td[1]''; var titlex = ''./strong''; var linkx = ''./div/a[1]''; } else { var xpath = ''//div[@id="main_toc"]/dl''; var titlex = ''./dt''; var linkx = ''./dd/div/a[1]''; } var blocks = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null); var next_block; while (next_block = blocks.iterateNext()) { var title = doc.evaluate(titlex, next_block, null, XPathResult.ANY_TYPE, null).iterateNext().textContent; var link = doc.evaluate(linkx, next_block, null, XPathResult.ANY_TYPE, null).iterateNext().href; items[link] = title; } items = Zotero.selectItems(items); for (var i in items) { articles.push(getID(i)); } } else { articles = [getID(url)]; } Zotero.debug(articles); for (var i in articles) { var poststr = ''format=cite-abs&citation-type=RIS&pii='' + articles[i] + ''&action=download&Submit=Export''; var pdfurl = ''http://download.ajhg.org/AJHG/pdf/PII'' + articles[i].replace(/(\(|\)|\-)/g, "") + ''.pdf''; var newurl = ''http://www.ajhg.org/AJHG/fulltext/'' + articles[i]; Zotero.Utilities.HTTP.doPost(''http://ajhg.org/AJHG/citationexport'', poststr, function(text) { var trans = Zotero.loadTranslator("import"); trans.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); trans.setString(text); trans.setHandler("itemDone", function(obj, item) { item.attachments = [ {url:newurl, title:"AJHG Snapshot", mimeType:"text/html"}, {url:pdfurl, title:"AJHG Full Text PDF", mimeType:"application/pdf"} ]; if (item.notes[0]["note"]) { item.abstractNote = item.notes[0]["note"]; } item.notes = []; item.complete(); }); trans.translate(); Zotero.done(); }); } Zotero.wait(); }'); REPLACE INTO translators VALUES ('f26cfb71-efd7-47ae-a28c-d4d8852096bd', '1.0.0b4.r5', '', '2008-07-07 14:50:00', '0', '99', '4', 'Cell Press', 'Michael Berkowitz', 'http://www.(cancercell|cell|cellhostandmicrobe|cellmetabolism|cellstemcell|chembiol|current-biology|developmentalcell|immunity|molecule|neuron|structure).(org|com)', 'function detectWeb(doc, url) { if (url.indexOf("search/results") != -1) { return "multiple"; } else if (url.indexOf("content/article") != -1) { return "journalArticle"; } }', 'function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var dataTags = new Object(); var fieldTitle; var commaSplit = new Array(); var newItem = new Zotero.Item("journalArticle"); //title newItem.title = doc.evaluate(''//h1[@class="article_title"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; //publication, volume, pages, date. var voliss = doc.evaluate(''//div[contains(@class, "article_citation")]/p[1]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; var volissSplit = voliss.split("."); for (var i = 0; i < volissSplit.length; i++) { if (volissSplit[i].match(", ")) { commaSplit = volissSplit[i].split(", "); } } if (commaSplit[0] != '''') { newItem.publicationTitle = commaSplit[0]; } if (commaSplit[1] != '''') { newItem.volume = commaSplit[1]; } if (commaSplit[2] != '''') { newItem.pages= commaSplit[2]; } if (commaSplit[3] != '''') { newItem.date= commaSplit[3]; } //abstract var abstractXPath2 = ''//div[@class="min_fulltext"][@id="main_content"]/p''; if (doc.evaluate(abstractXPath2, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { newItem.abstractNote = doc.evaluate(abstractXPath2, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; } var abstractXPath = ''//div[@class="panelcontent article_summary"]/p[contains(text(), " ")]''; if (doc.evaluate(abstractXPath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { newItem.abstractNote = doc.evaluate(abstractXPath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; } //authors var authors = doc.evaluate(''//p[@class="authors"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.split(","); for (var i in authors) { var next_author = authors[i]; if (next_author.match(/[a-z]/)) { next_author = Zotero.Utilities.trimInternal(next_author.replace(/\d/g, "")); if (next_author.substr(0, 3) == "and") { next_author = next_author.substr(4); } newItem.creators.push(Zotero.Utilities.cleanAuthor(next_author, "author")); } } //url var newurl = doc.location.href; if (newurl.indexOf("abstract") != -1) { newurl = newurl.replace("abstract", "fulltext"); } //attachments var uid = newurl.match(/uid=([^&]+)/)[1]; var pdfx = ''//a[contains(text(), "PDF")][contains(@href, "'' + uid + ''")]''; var pdfurl = doc.evaluate(pdfx, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().href; newItem.attachments = [ {url:newurl, title:"Cell Press Snapshot", mimeType:"text/html"}, {url:pdfurl, title:"Cell Press Full Text PDF", mimeType:"application/pdf"} ]; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var titles = doc.evaluate(''//dd/strong'', doc, nsResolver, XPathResult.ANY_TYPE, null); var link = doc.evaluate(''//nobr/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_title; var next_lilnk; while (next_title = titles.iterateNext()) { next_link = link.iterateNext(); if (next_link.textContent.match("Summary")) { items[next_link.href] = next_title.textContent; } else { next_link = link.iterateNext(); items[next_link.href] = next_title.textContent; } } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('0cc8e259-106e-4793-8c26-6ec8114a9160', '1.0.0b4.r5', '', '2008-02-13 11:30:00', '1', '99', '4', 'SlideShare', 'Michael Berkowitz', 'http://www.slideshare.net/', 'function detectWeb(doc, url) { if (url.indexOf("search") != -1) { return "multiple"; } else if (doc.evaluate(''//div[@class="slideProfile"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "presentation"; } }', 'function doWeb(doc, url) { var loggedin = false; if (doc.evaluate(''//a[@class="green_link"][text() = "logout"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { loggedin = true; } var shows = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var links = doc.evaluate(''//div[@class="search_list_box"]/div[@class="text_12"]/a'', doc, null, XPathResult.ANY_TYPE, null); var next_link; while (next_link = links.iterateNext()) { items[next_link.href] = Zotero.Utilities.trimInternal(next_link.textContent); } items = Zotero.selectItems(items); if (!items) { return true; } for (var i in items) { shows.push(i); } } else { shows = [url]; } Zotero.Utilities.processDocuments(shows, function(newDoc) { var downloadable = true; if (newDoc.evaluate(''//p[@class="upload_p_left"][contains(text(), "Download not available")]'', newDoc, null, XPathResult.ANY_TYPE, null).iterateNext()) { downloadable = false; } var item = new Zotero.Item("presentation"); item.title = newDoc.evaluate(''//div[@class="slideProfile"]//h3'', newDoc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent; var creator = newDoc.evaluate(''//div[@class="slideProfile"]//p/a[@class="blue_link_normal"]'', newDoc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent; item.creators.push(Zotero.Utilities.cleanAuthor(creator, "author")); var tags = newDoc.evaluate(''//a[@class="grey_tags"]'', newDoc, null, XPathResult.ANY_TYPE, null); var next_tag; while (next_tag = tags.iterateNext()) { item.tags.push(Zotero.Utilities.trimInternal(next_tag.textContent)); } var newurl = newDoc.location.href; item.url = newurl; item.repository = "SlideShare"; var pdfurl; if (newurl.substr(-1) == "/") { pdfurl = newurl + "download"; } else { pdfurl = newurl + "/download"; } if (loggedin) { if (downloadable) { item.attachments.push({url:pdfurl, title:"SlideShare Slide Show", mimeType:"application/pdf"}); } } item.complete(); }, function() {Zotero.done;}); }'); REPLACE INTO translators VALUES ('8b35ab14-f18a-4f69-8472-b2df18c984da', '1.0.0b4.r5', '', '2008-04-01 04:50:00', '1', '100', '4', 'Davidson College Library', 'Michael Berkowitz', 'http://www.lib.davidson.edu/', 'function detectWeb(doc, url) { if (url.indexOf("log_in") == -1) { if (url.indexOf("screen=Record") != -1) { return "book"; } else { return "multiple"; } } }', 'function doWeb(doc, url) { var books = new Array(); if (detectWeb(doc, url) == "multiple") { var items = Zotero.Utilities.getItemArray(doc, doc, ''screen=Record.html''); items = Zotero.selectItems(items); for (var i in items) { books.push(i.replace("Record.html", "MARCRecord.html")); } } else { books = [url.replace("Record.html", "MARCRecord.html")]; } var translator = Zotero.loadTranslator("import"); translator.setTranslator("a6ee60df-1ddc-4aae-bb25-45e0537be973"); var marc = translator.getTranslatorObject(); Zotero.Utilities.processDocuments(books, function(newDoc) { var uri = newDoc.location.href; var namespace = newDoc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var nonstandard = false; var xpath; var xpath = ''//td[@class="body"]/p/table/tbody/tr[td[3]]''; var elmts = newDoc.evaluate(xpath, newDoc, nsResolver, XPathResult.ANY_TYPE, null); var elmt; var record = new marc.record(); while(elmt = elmts.iterateNext()) { var field = Zotero.Utilities.trimInternal(newDoc.evaluate(''./td[1]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent); if(field) { var value = newDoc.evaluate(''./td[3]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; if(field == "LDR") { record.leader = value; } else if(field != "FMT") { value = value.replace(/\$([a-z]) /g, marc.subfieldDelimiter+"$1"); var code = field.substring(0, 3); var ind = ""; if(field.length > 3) { ind = field[3]; if(field.length > 4) { ind += field[4]; } } record.addField(code, ind, value); } } } var newItem = new Zotero.Item(); record.translate(newItem); var domain = url.match(/https?:\/\/([^/]+)/); newItem.repository = "Davidson College Library Catalog"; newItem.complete(); }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('1885b93c-cf37-4b25-aef5-283f42eada9d', '1.0.0b4.r5', '', '2008-08-19 10:30:00', '0', '100', '4', 'Informaworld', 'Michael Berkowitz', 'http://www.informaworld.com', 'function detectWeb(doc, url) { if (url.indexOf("quicksearch") != -1) { return "multiple"; } else if (doc.evaluate(''//a[substring(text(), 2, 8) = "Download"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { if (doc.evaluate(''//div[@id="metahead"]/div/strong[text() = "Published in:"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { var pubtype = doc.evaluate(''//img[substring(@title, 1, 17) = "Publication type:"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().title; if (pubtype.match("journal")) { return "journalArticle"; } else if (pubtype.match("book")) { return "bookSection"; } } else { return "book"; } } else if (url.indexOf("content=g") != -1 || doc.evaluate(''//div[@id="browse"]//tbody/tr/td[2]/a[2]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext() || doc.evaluate(''//div[@id="title"]//td[2]/div/strong/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else { return true; } } ', 'function doWeb(doc, url) { var links = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); if (doc.evaluate(''//div[@id="quicksearch"]//tr/td/b/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { var xpath = ''//div[@id="quicksearch"]//tr/td/b/a''; } else if (doc.evaluate(''//div[@id="title"]/table/tbody/tr[2]//strong/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { var xpath = ''//div[@id="title"]/table/tbody/tr[2]//strong/a''; } else if (doc.evaluate(''//div[@id="browse"]//tbody/tr/td[2]/a[2]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { var xpath = ''//div[@id="browse"]//tbody/tr/td[2]/a[2]''; } else if (doc.evaluate(''//div[@id="title"]//td[2]/div/strong/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { var xpath = ''//div[@id="title"]//td[2]/div/strong/a''; } var titles = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null); var title = titles.iterateNext(); while (title) { items[title.href] = title.textContent; title = titles.iterateNext(); } items = Zotero.selectItems(items); for (var i in items) { links.push(i); } } else { links = [url]; } Zotero.debug(links); Zotero.Utilities.processDocuments(links, function(newDoc) { var xpath = ''//div[@id="metahead"]/div''; var stuff = newDoc.evaluate(xpath, newDoc, null, XPathResult.ANY_TYPE, null); var thing = stuff.iterateNext() ; while (thing) { if (thing.textContent.match(/DOI/)) { var doi = Zotero.Utilities.trimInternal(thing.textContent).match(/:\s+(.*)/)[1]; } thing = stuff.iterateNext(); } var pdfurl = newDoc.evaluate(''//div[@id="content"]/div/a[1]'', newDoc, null, XPathResult.ANY_TYPE, null).iterateNext().href; var id = newDoc.location.href.match(/content=([\w\d]+)/); var post = ''tab=citation&selecteditems='' + id[1].substr(1) + ''&content='' + id[1] + ''&citstyle=refworks&showabs=false&format=file''; Zotero.Utilities.HTTP.doPost(''http://www.informaworld.com/smpp/content'', post, function(text) { text = text.replace(/RT/, "TY"); text = text.replace(/VO/, "VL"); text = text.replace(/LK/, "UR"); text = text.replace(/YR/, "PY"); text = text.replace(/([A-Z][A-Z\d]\s)/g, "$1 - ") var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { var type = text.match(/TY\s+\-\s+([^\n]*)/)[1]; if (type == "Journal") { item.itemType = "journalArticle"; } else if (type == "Book, Whole") { item.itemType = "book"; } else if (type == "Book, Section") { item.itemType = "bookSection"; } if (doi) { item.DOI = doi; } item.attachments.push({url:pdfurl, title:item.title, mimeType:''application/pdf''}); item.complete(); }); translator.translate(); }); }, function() {Zotero.done;}); }'); REPLACE INTO translators VALUES ('f880bf79-d42f-4337-b0d2-7a7de4a48b7d', '1.0.0b4.r5', '', '2008-02-06 21:00:00', '0', '100', '4', 'Library Catalog (X-OPAC)', 'Michael Berkowitz', '(xopac|hylib)', 'function detectWeb(doc, url) { if (url.indexOf("&nd=") != -1) { return "book"; } else if (url.indexOf("Aktion") != -1) { return "multiple"; } }', 'function doWeb(doc, url) { var ids = new Array(); if (detectWeb(doc, url) == "multiple") { var xpath = ''//table/tbody/tr/td//a''; var links = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null); var link = links.iterateNext(); var items = new Object(); while (link) { if (link.href.match(/&nd=\d+/)) { items[link.href.match(/&nd=(\d+)/)[1]] = Zotero.Utilities.trimInternal(link.textContent); } link = links.iterateNext(); } items = Zotero.selectItems(items); for (var i in items) { ids.push(i); } } else { ids = [url.match(/&nd=(\d+)/)[1]]; } Zotero.debug(ids); for (var i = 0 ; i < ids.length ; i++) { var post = ''db=ubfr&nd='' + ids[i] + ''&counter=0&Aktion=S&VomOLAF=0&links=1&gk=&format=ris''; Zotero.Utilities.HTTP.doPost(''http://www.ub.uni-freiburg.de/cgi-bin/refman'', post, function(text) { //Zotero.debug(text); var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.translate(); }); } }'); REPLACE INTO translators VALUES ('0cdc6a07-38cf-4ec1-b9d5-7a3c0cc89b15', '1.0.0b4.r5', '', '2008-08-20 15:20:00', '0', '100', '4', 'OSTI Energy Citations', 'Michael Berkowitz', 'http://www.osti.gov/energycitations', 'function detectWeb(doc, url) { if (doc.evaluate(''//table[@class="searchresults"]//a[@class="citation"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else if (url.indexOf("product.biblio.jsp") != -1) { return "journalArticle"; } }', 'function doWeb(doc, url) { var urls = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var xpath = ''//table[@class="searchresults"]//a[@class="citation"]''; var links = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null); var next_link; while (next_link = links.iterateNext()) { items[next_link.href] = next_link.textContent; } items = Zotero.selectItems(items); for (var i in items) { urls.push(i.match(/osti_id=\d+/)[0]); } } else { urls = [url.match(/osti_id=\d+/)[0]]; } for (var i = 0 ; i < urls.length ; i++) { var getstr = ''http://www.osti.gov/energycitations/endnote?'' + urls[i]; Zotero.Utilities.HTTP.doGet(getstr, function(text) { Zotero.debug(text); text = text.replace(/(%.)/g, "$1 "); var trans = Zotero.loadTranslator("import"); trans.setTranslator("881f60f2-0802-411a-9228-ce5f47b64c7d"); trans.setString(text); trans.translate(); }); } }'); REPLACE INTO translators VALUES ('4345839f-b4fd-4e3f-a73d-268b6f280f6e', '1.0.0b4.r5', '', '2008-01-29 20:00:00', '0', '100', '4', 'Journal of Vision', 'Michael Berkowitz', 'http://(www.)?journalofvision.org/', 'function detectWeb(doc, url) { if (url.indexOf("search.aspx?") != -1 || url.match(/\d+/g).length == 2) { return "multiple"; } else if (url.match(/\d+/g).length == 3) { return "journalArticle"; } }', 'function doWeb(doc, url) { var urls = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); if (doc.evaluate(''//a[@class="AbsTitle"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { var xpath = ''//a[@class="AbsTitle"]''; } else if (doc.evaluate(''//a[@class="toc_ArticleTitle"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { var xpath = ''//a[@class="toc_ArticleTitle"]''; } var articles = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null); var next_art; while (next_art = articles.iterateNext()) { items[next_art.href] = next_art.textContent; } items = Zotero.selectItems(items); for (var i in items) { urls.push(i); } } else { urls.push(url); } Zotero.debug(urls); Zotero.Utilities.processDocuments(urls, function(newDoc) { var rislink = newDoc.evaluate(''//div[@id="block0"]/table/tbody/tr/td[@class="body"]/a'', newDoc, null, XPathResult.ANY_TYPE, null).iterateNext().href.replace("info/GetCitation", "AutomaticCitationDownload") + ''&type=ReferenceManager''; var DOI = newDoc.evaluate(''//td[2]/span[@class="toc_VolumeLine"]'', newDoc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent.match(/doi:\s*(.*)$/)[1]; var PDF = newDoc.evaluate(''//div[@class="jovHistory"]//td[2]/a'', newDoc, null, XPathResult.ANY_TYPE, null).iterateNext().href; Zotero.debug(rislink); Zotero.Utilities.HTTP.doGet(rislink, function(text) { var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { item.DOI = DOI; item.publicationTitle = "Journal of Vision"; item.attachments = [{url:PDF, title:"Journal of Vision Full Text PDF", mimeType:"application/pdf"}]; item.complete(); }); translator.translate(); }); }, function() {Zotero.done;}); }'); REPLACE INTO translators VALUES ('966a7612-900c-42d9-8780-2a3247548588', '1.0.0b4.r5', '', '2008-01-25 20:00:00', '0', '100', '4', 'eMJA', 'Michael Berkowitz', 'http://www.mja.com.au/', 'function detectWeb(doc, url) { if (doc.evaluate(''//p[@class="Pfoot"]/b/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext() || doc.evaluate(''/html/body/table/tbody/tr[1]/td[2]/a/b'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else if (doc.title.indexOf("eMJA:") != -1) { return "journalArticle"; } }', 'function senCase(string) { var smallwords = Array("and", "a", "in", "the", "by", "of", "s", "on"); var sen = string.split(/\b/); for (var i = 0 ; i < sen.length; i++) { if (sen[i].match(/\w+/)) { if (smallwords.indexOf(sen[i]) != -1 && i != 0) { sen[i] = sen[i].toLowerCase(); } else { sen[i] = sen[i][0].toUpperCase() + sen[i].substring(1).toLowerCase(); } } } return sen.join(""); } function doWeb(doc, url) { var URIs = new Array(); if (doc.evaluate(''//p[@class="Pfoot"]/b/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { var xpath = ''//p[@class="Pfoot"]/b/a''; } else if (doc.evaluate(''//tr[1]/td[2]/a/b'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { var xpath = ''//tr[1]/td[2]/a/b''; var linkpath = ''//tr[2]/td[2]/small[@class="gr"]''; } if (xpath) { if (linkpath) { var items = new Object(); var titles = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null); var links = doc.evaluate(linkpath, doc, null, XPathResult.ANY_TYPE, null); var title = titles.iterateNext(); var link = links.iterateNext(); while (title) { //Zotero.debug(Zotero.Utilities.cleanString(title.textContent)); //Zotero.debug(Zotero.Utilities.cleanString(link.textContent)); items[Zotero.Utilities.cleanString(link.textContent)] = Zotero.Utilities.cleanString(title.textContent).substring(6); title = titles.iterateNext(); link = links.iterateNext(); } } else { var items = new Object(); var things = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null); var next_thing = things.iterateNext(); while (next_thing) { items[next_thing.href] = senCase(Zotero.Utilities.cleanString(next_thing.textContent)); next_thing = things.iterateNext(); } } items = Zotero.selectItems(items); Zotero.debug(items); for (var i in items) { URIs.push(i); } } else { URIs.push(url); } Zotero.debug(URIs); Zotero.Utilities.processDocuments(URIs, function(newDoc) { var newItem = new Zotero.Item("journalArticle"); newItem.title = senCase(newDoc.title.substring(6)); newItem.publicationTitle = "The Medical Journal of Australia"; newItem.ISSN = "0025-729X"; newItem.url = newDoc.location.href; //date newItem.date = newDoc.evaluate(''//meta[@name="date"]/@content'', newDoc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent.substring(0,10); //voliss var voliss = newDoc.evaluate(''//meta[@name="citation"]/@content'', newDoc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent; //voliss = voliss.match(/[^\d]+(\d+)\s+\((\d+)\)/); voliss = voliss.match(/;\s+(\d+)\s+\((\d+)[^:]+:\s+(.*)\.$/); newItem.volume = voliss[1]; newItem.issue = voliss[2]; newItem.pages = voliss[3]; //authors var authors = new Array(); var apath = ''//div[@class="By"]/span[@class="Pn"]''; var author = newDoc.evaluate(apath, newDoc, null, XPathResult.ANY_TYPE, null); var next_a = author.iterateNext(); while (next_a) { var name = next_a.textContent; if (name.substring(0,1) == ",") { name = name.substring(2); } else if (name.substring(0,4) == " and") { name = name.substring(5); } authors.push(name); next_a = author.iterateNext(); } for (var i in authors) { newItem.creators.push(Zotero.Utilities.cleanAuthor(authors[i], "author")); } //attachments newItem.attachments = [ {url:newDoc.location.href, title:"eMJA Snapshot", mimeType:"text/html"}, {url:newDoc.location.href.replace(".html", ".pdf") , title:"eMJA PDF", mimeType:"application/pdf"} ]; newItem.complete(); }, function() {Zotero.done;}); }'); REPLACE INTO translators VALUES ('303c2744-ea37-4806-853d-e1ca67be6818', '1.0.0b4.r5', '', '2008-04-23 09:45:00', '1', '100', '4', 'CSIRO Publishing', 'Michael Berkowitz', 'http://(www.)?publish.csiro.au/', 'function detectWeb(doc, url) { if (doc.evaluate(''//a[@class="searchBoldBlue"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext() || doc.evaluate(''//a[@class="linkjournal"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else if (url.indexOf("/view/journals/") != -1 || url.indexOf("paper") != -1) { return "journalArticle"; } }', 'function doWeb(doc, url) { var links = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); if (doc.evaluate(''//a[@class="searchBoldBlue"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { var arts = doc.evaluate(''//a[@class="searchBoldBlue"]'', doc, null, XPathResult.ANY_TYPE, null); var art = arts.iterateNext(); while (art) { items[art.href] = art.textContent; art = arts.iterateNext(); } } else if (doc.evaluate(''//a[@class="linkjournal"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { var arts = doc.evaluate(''//a[@class="linkjournal"]'', doc, null, XPathResult.ANY_TYPE, null); var titles = doc.evaluate(''//td[3]//td[1]/table/tbody/tr/td/b'', doc, null, XPathResult.ANY_TYPE, null); var art; var title; while ((art = arts.iterateNext()) && (title = titles.iterateNext())) { items[art.href] = title.textContent; } } items = Zotero.selectItems(items); for (var i in items) { links.push(i.match(/([^/=.htm]*)(.htm)?$/)[1]); } } else { links.push(url.match(/([^/=.htm]*)(.htm)?$/)[1]); } for (var i in links) { var newURL = ''http://www.publish.csiro.au/view/journals/dsp_journal_retrieve_citation.cfm?ct='' + links[i] + ''.ris''; var pdfURL = ''http://www.publish.csiro.au/?act=view_file&file_id='' + links[i] + ''.pdf''; Zotero.Utilities.HTTP.doGet(newURL, function(text) { var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { item.itemType = "journalArticle"; if (item.notes[0]) { item.abstractNote = item.notes[0].note; } item.attachments = [ {url:pdfURL, title:"CSIRO Publishing PDF", mimeType:"application/pdf"}, {url:newURL, title:"CSIRO Publishing Snaphost", mimeType:"text/html"} ]; item.complete(); }); translator.translate(); }); } Zotero.wait(); }'); REPLACE INTO translators VALUES ('27ee5b2c-2a5a-4afc-a0aa-d386642d4eed', '1.0.0b4.r5', '', '2008-08-06 17:00:00', '1', '100', '4', 'PubMed Central', 'Michael Berkowitz', 'http://[^/]*.nih.gov/', 'function detectWeb(doc, url) { if (doc.evaluate(''//table[@id="ResultPanel"]//td[2]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else if (url.indexOf("articlerender") != -1) { return "journalArticle"; } }', 'function doWeb(doc, url) { var tagMap = {journal_title:"publicationTitle", title:"title", date:"date", issue:"issue", volume:"volume", doi:"DOI", fulltext_html_url:"url" } var URIs = new Array(); var items = new Object(); if (doc.title.indexOf("PMC Results") != -1) { var titlex = ''//div[@class="toc-entry"]/div/div[@class="toc-title"]''; var linkx = ''//div[@class="toc-entry"]/div/a[@class="toc-link"][1]''; var titles = doc.evaluate(titlex, doc, null, XPathResult.ANY_TYPE, null); var next_title = titles.iterateNext(); var links = doc.evaluate(linkx, doc, null, XPathResult.ANY_TYPE, null); var next_link = links.iterateNext(); while (next_title && next_link) { items[next_link.href] = next_title.textContent; next_title = titles.iterateNext(); next_link = links.iterateNext(); } items = Zotero.selectItems(items); for (var i in items) { URIs.push(i); } } else { URIs.push(url); } for each (var link in URIs) { Zotero.Utilities.HTTP.doGet(link, function(text) { var tags = new Object(); var meta = text.match(/<meta[^>]*>/gi); for (var i in meta) { var item = meta[i].match(/=\"([^"]*)\"/g); if (item[0].substring(2, 10) == ''citation'') { tags[item[0].substring(11, item[0].length - 1)] = item[1].substring(2, item[1].length - 1); } } var newItem = new Zotero.Item("journalArticle"); for (var tag in tagMap) { newItem[tagMap[tag]] = Zotero.Utilities.unescapeHTML(tags[tag]); } for (var i in meta) { if (meta[i].match(/DC.Contributor/)) { newItem.creators.push(Zotero.Utilities.cleanAuthor(Zotero.Utilities.unescapeHTML(meta[i].match(/content=\"([^"]*)\">/)[1]), "author")); } } newItem.attachments.push({url:tags["fulltext_html_url"], title:"PubMed Central Snapshot", mimeType:"text/html"}); if (tags["pdf_url"]) { newItem.attachments.push({url:tags["pdf_url"], title:"PubMed Central Full Text PDF", mimeType:"application/pdf"}); } newItem.url = tags["fulltext_html_url"]; if (!newItem.url) newItem.url = tags["abstract_html_url"]; newItem.extra = text.match(/PMC\d+/)[0]; newItem.journalAbbreviation = text.match(/span class=\"citation-abbreviation\">([^<]+)</)[1]; newItem.pages = text.match(/span class=\"citation-flpages\">([^<]+)</)[1].replace(/[\.:\s]/g, ""); if (text.match(/Abstract<\/div>([^<]+)</)) { var abstract = text.match(/Abstract<\/div>([^<]+)</)[1]; } else if (text.match(/\"section-content\"><!\-\-article\-meta\-\->([^<]+)/)) { var abstract = text.match(/\"section-content\"><!\-\-article\-meta\-\->([^<]+)/)[1]; } if (abstract) newItem.abstractNote = abstract; newItem.complete(); }); } Zotero.wait(); }'); REPLACE INTO translators VALUES ('60d97c99-47f0-4323-98b6-5699faf827b1', '1.0.0b4.r5', '', '2008-01-09 20:00:00', '0', '100', '4', 'Blackwell Compass', 'Michael Berkowitz', 'http://www.blackwell-compass.com/subject/[^/]+/.+', 'function detectWeb(doc, url) { if (url.indexOf("search_results") != -1 || url.indexOf("section_home") != -1) { return "multiple"; } else { return "journalArticle"; } }', 'function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var URIs = new Array(); var items = new Object(); if (detectWeb(doc, url) == "multiple") { var xpath = ''//div[@class="article-holder"]//h4[@class="article"]/a''; var articles = doc.evaluate(xpath, doc, namespace, XPathResult.ANY_TYPE, null); var next_art = articles.iterateNext(); while (next_art) { items[next_art.href] = next_art.textContent; next_art = articles.iterateNext(); } items = Zotero.selectItems(items); for (var i in items) { URIs.push(i); } } else { URIs.push(url); } Zotero.Utilities.processDocuments(URIs, function(doc, urll) { var doi = doc.evaluate(''//div[@id="content"]/p/span[@class="guide"]/a[substring(@href, 1, 4) = "http"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().href.match(/doi\/[^/]*\/([^&]*)/)[1]; Zotero.Utilities.HTTP.doGet(''http://www.blackwell-synergy.com/action/downloadCitation?doi='' + doi + ''&include=cit&format=refman&direct=on&submit=Download+references'', function(text) { var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { item.attachments = [ {url:item.url, title:"Blackwell Compass Snapshot", mimeType:"text/html"}, {url:item.url.replace("/doi/abs", "/doi/pdf"), title:"Blackwell Compass Full Text PDF", mimeType:"application/pdf"} ]; item.complete(); }); translator.translate(); }); }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('ca6e95d1-46b9-4535-885c-df0c2d4b7f7a', '1.0.0b4.r5', '', '2008-01-07 19:00:00', '0', '100', '4', 'Innovate Online', 'Michael Berkowitz', '^http://(www.)?innovateonline.info/', 'function detectWeb(doc, url) { if (url.indexOf("view=article") != -1) { return "journalArticle"; } else if (url.indexOf("view=search") != -1) { return "multiple"; } }', 'function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var newURIs = new Array(); if (url.indexOf("view=search") != -1) { var titles = new Array(); var hrefs = new Array(); var items = new Object(); var xpath = ''//ul[@class="articles"]/li[@class="result"]/div[@class="header"]''; var names = doc.evaluate(xpath, doc, namespace, XPathResult.ANY_TYPE, null); var next_item = names.iterateNext(); while (next_item) { titles.push(next_item.textContent.split(/\n/)[3]); next_item = names.iterateNext(); } var nextpath = ''//ul[@class="articles"]/li/@onclick''; var links = doc.evaluate(nextpath, doc, namespace, XPathResult.ANY_TYPE, null); var next_link = links.iterateNext(); while (next_link) { hrefs.push(next_link.textContent); next_link = links.iterateNext(); } for (var i = 0 ; i < titles.length ; i++) { items[hrefs[i].match(/\d+/)] = titles[i]; } items = Zotero.selectItems(items); for (var i in items) { newURIs.push(''http://innovateonline.info/index.php?view=article&id='' + i); } } else { var newURL = url; if (newURL.indexOf("highlight") != -1) { newURL = newURL.substring(0, newURL.indexOf("highlight") -1); } if (newURL.indexOf("action=synopsis") != -1) { newURL = newURL.replace("action=synopsis", "action=article"); } newURIs.push(newURL); } Zotero.debug(newURIs); Zotero.Utilities.processDocuments(newURIs, function(newDoc) { var newItem = new Zotero.Item("journalArticle"); newItem.repository = "Innovate Online"; newItem.publicationTitle = "Innovate"; newItem.title = newDoc.title.substring(10); var authors = newDoc.evaluate(''//div[@id="title"]/div[@class="author"]/a'', newDoc, namespace, XPathResult.ANY_TYPE, null); var author = authors.iterateNext(); while (author) { newItem.creators.push(Zotero.Utilities.cleanAuthor(author.textContent, "author")); author = authors.iterateNext(); } newItem.date = newDoc.evaluate(''//div[@id="page"]/a/div[@class="title"]'', newDoc, namespace, XPathResult.ANY_TYPE, null).iterateNext().textContent; var voliss = newDoc.evaluate(''//div[@id="page"]/a/div[@class="subtitle"]'', newDoc, namespace, XPathResult.ANY_TYPE, null).iterateNext().textContent.match(/Volume\s+(\d+).*Issue\s+(\d+)/); newItem.volume = voliss[1]; newItem.issue = voliss[2]; var id = newDoc.location.href.match(/\d+/)[0]; var PDFurl = "http://innovateonline.info/print.php?view=pdf&id=" + id; newItem.attachments = [ {url:newDoc.location.href, title:"Innovate Online Snapshot", mimeType:"text/html"}, {url:PDFurl, title:"Innovate Online PDF", mimeType:"application/pdf"} ] Zotero.Utilities.HTTP.doGet(newDoc.location.href.replace("action=article", "action=synopsis"), function(text) { var abs = text.match(/<div id=\"synopsis\">\n<p>(.*)<\/p>/)[1]; newItem.abstractNote = Zotero.Utilities.unescapeHTML(Zotero.Utilities.cleanTags(abs)); newItem.complete(); }); }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('bdae838b-3a58-461f-9e8a-142ed9de61dc', '1.0.0b4.r5', '', '2008-04-02 08:10:00', '1', '100', '4', 'PLoS Biology and Medicine', 'Michael Berkowitz', 'http://[^.]+\.plosjournals\.org/', 'function detectWeb(doc, url) { if (doc.evaluate(''//div[@class="search"][@id="browseResults"]/ul/li/span/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext() || doc.evaluate(''//div[@id="toclist"]/dl/dt/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else if (url.indexOf("get-document") != -1) { return "journalArticle"; } }', 'function unescape(text) { var specialreg=new RegExp("[^;]+;"); var specials=specialreg.exec(text); while(specials) { text=text.replace(specials[0], String.fromCharCode(parseInt(specials[0].substring(2, specials[0].length-1), 10))); specials=specialreg.exec(text); } return text; } function doWeb(doc, url) { var URLs = new Array(); var items = new Object(); if (detectWeb(doc, url) == "multiple") { if (doc.evaluate(''//div[@class="search"][@id="browseResults"]/ul/li/span/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { var xpath = ''//div[@class="search"][@id="browseResults"]/ul/li/span/a''; } else if (doc.evaluate(''//div[@id="toclist"]/dl/dt/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { var xpath = ''//div[@id="toclist"]/dl/dt/a''; } var articles = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null); var next_article = articles.iterateNext(); while (next_article) { items[next_article.href] = Zotero.Utilities.cleanString(next_article.textContent); next_article = articles.iterateNext(); } items = Zotero.selectItems(items); if (!items) { return true; } for (var i in items) { URLs.push(i); } } else { URLs.push(url); } Zotero.Utilities.processDocuments(URLs, function(doc, url) { var bits = doc.location.href.match(/(^.*\?request=).*(doi=.*$)/); var RISurl = bits[1] + ''download-citation&t=refman&'' + bits[2]; Zotero.Utilities.HTTP.doGet(RISurl, function(text) { var trans=Zotero.loadTranslator("import"); trans.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); trans.setString(text); trans.setHandler("itemDone", function(obj, newItem) { var urlstring= bits[1]+ ''get-pdf&'' +bits[2].replace("doi=", "file=").replace("/", "_").replace("%2F", "_") + ''-S.pdf''; newItem.attachments.push({url:urlstring, title:newItem.title, mimeType:"application/pdf"}); var urlRE = /http:\/\/dx.doi.org\/(.*)$/; if (newItem.url) { newItem.DOI = newItem.url.match(urlRE)[1].replace("%2F", "/"); } newItem.complete(); }); trans.translate(); Zotero.done(); }); Zotero.wait(); }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('9575e804-219e-4cd6-813d-9b690cbfc0fc', '1.0.0b4.r5', '', '2008-04-02 08:30:00', '1', '100', '4', 'PLoS Journals', 'Michael Berkowitz', 'http://www\.plos(one|ntds|compbiol|pathogens|genetics)\.org/(search|article)/', 'function detectWeb(doc, url) { if (url.indexOf("Search.action") != -1 || url.indexOf("browse.action") != -1) { return "multiple"; } else if (url.indexOf("article") != -1) { return "journalArticle"; } }', 'function doWeb(doc, url) { var items = new Object(); var texts = new Array(); if (url.indexOf("Search.action") != -1 || url.indexOf("browse.action") != -1) { var articlex = ''//span[@class="article"]/a''; var articles = doc.evaluate(articlex, doc, null, XPathResult.ANY_TYPE, null); var next_art = articles.iterateNext(); while (next_art) { items[next_art.href] = next_art.textContent; next_art = articles.iterateNext(); } items = Zotero.selectItems(items); for (var i in items) { texts.push(i); } } else { texts.push(url); } Zotero.Utilities.processDocuments(texts, function(newDoc, url) { var doi = newDoc.location.href.match(/doi(\/|%2F)(.*)$/)[2]; var newURL = newDoc.location.href.replace("info", "getRisCitation.action?articleURI=info"); var pdfURL = newDoc.location.href.replace("info", "fetchObjectAttachment.action?uri=info") + ''&representation=PDF''; Zotero.Utilities.HTTP.doGet(newURL, function(text) { var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { item.attachments.push({url:pdfURL, title:"PLoS One Full Text PDF", mimeType:"application/pdf"}); item.DOI = doi; item.repository = item.publicationTitle; item.complete(); }); translator.translate(); }); }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('b86bb082-6310-4772-a93c-913eaa3dfa1b', '1.0.0b4.r5', '', '2008-02-11 19:30:00', '0', '100', '4', 'Early English Books Online', 'Michael Berkowitz', 'http://[^/]*eebo.chadwyck.com[^/]*/search', 'function detectWeb(doc, url) { if (doc.title == "Search Results - EEBO") { return "multiple"; } else if (doc.title != "Basic Search - EEBO") { return "book"; } }', 'function doWeb(doc, url) { var eeboIDs = new Array(); var hostRegexp = new RegExp("^(https?://[^/]+)/"); var hMatch = hostRegexp.exec(url); var host = hMatch[1]; if (doc.title == "Search Results - EEBO") { var items = new Object(); Zotero.debug("search page"); var IDxpath = ''//td[3]/script''; var Titlexpath = ''//td[3]/i''; var new_ids = doc.evaluate(IDxpath, doc, null, XPathResult.ANY_TYPE, null); var new_titles = doc.evaluate(Titlexpath, doc, null, XPathResult.ANY_TYPE, null); var next_id = new_ids.iterateNext(); var next_title = new_titles.iterateNext(); var IDRegex = /''(\d+)''/; while (next_id) { items[next_id.textContent.match(IDRegex)[1]] = next_title.textContent; next_id = new_ids.iterateNext(); next_title = new_titles.iterateNext(); } items = Zotero.selectItems(items); for (var i in items) { eeboIDs.push(i); } } else { var IDRegex = /&ID=(\w+)&/ var eeboid = url.match(IDRegex)[1]; if (eeboid[0] == "D") { eeboid = eeboid.slice(7, 14); } eeboIDs.push(eeboid); } Zotero.debug(eeboIDs); for (var i = 0 ; i < eeboIDs.length ; i++) { var postString = ''cit_format=RIS&Print=Print&cit_eeboid='' + eeboIDs[i] + ''&EeboId='' + eeboIDs[i]; var new_eeboid = eeboIDs[i] Zotero.Utilities.HTTP.doPost(host+''/search/print'', postString, function(text) { // load translator for RIS var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text.substring(17)); translator.setHandler("itemDone", function(obj, item) { item.url = host+''/search/full_rec?SOURCE=pgimages.cfg&ACTION=ByID&ID='' + new_eeboid + ''&FILE=../session/1190302085_15129&SEARCHSCREEN=CITATIONS&SEARCHCONFIG=config.cfg&DISPLAY=ALPHA''; item.complete(); }); translator.translate(); Zotero.done(); }); } }'); REPLACE INTO translators VALUES ('d9be934c-edb9-490c-a88d-34e2ee106cd7', '1.0.0b4.r5', '', '2008-08-04 07:10:00', '0', '100', '4', 'Time.com', 'Michael Berkowitz', 'http://www.time.com/time/', 'function detectWeb(doc, url) { if (doc.title == "TIME Magazine - Search Results") { return "multiple"; } else { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == "x") return namespace; else return null; } : null; var xpath = ''//meta[@name="byline"]''; var xpath2 = ''//div[@class="byline"]''; var xpath3 = ''//div[@class="copy"]/div[@class="byline"]''; if ((doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext() || doc.evaluate(xpath2, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext() || doc.evaluate(xpath3, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) ) { if (url.substr(-4,4) == "html") { return "magazineArticle"; } } } } ', 'function associateMeta(newItem, metaTags, field, zoteroField) { if (metaTags[field]) { newItem[zoteroField] = Zotero.Utilities.trimInternal(metaTags[field]); } } function scrape(doc, url) { var newItem = new Zotero.Item("magazineArticle"); newItem.publicationTitle = "Time"; newItem.ISSN = "0040-718X"; newItem.url = doc.location.href; var metaTags = new Object(); var metaTagHTML = doc.getElementsByTagName("meta") for (var i = 0 ; i < metaTagHTML.length ; i++) { metaTags[metaTagHTML[i].getAttribute("name")] = metaTagHTML[i].getAttribute("content"); } if (metaTags["head"]) { associateMeta(newItem, metaTags, "head", "title"); } else if (doc.title.length > 7) { newItem.title = doc.title.substr(0, doc.title.length - 7); } else { newItem.title = "No Title"; } if (metaTags["description"]) { associateMeta(newItem, metaTags, "description", "abstractNote"); } if (metaTags["date"]) { var date = metaTags["date"]; var months = new Object(); months["jan"] = "January"; months["feb"] = "February"; months["mar"] = "March"; months["apr"] = "April"; months["may"] = "May"; months["jun"] = "June"; months["jul"] = "July"; months["aug"] = "August"; months["sep"] = "September"; months["oct"] = "October"; months["nov"] = "November"; months["dec"] = "December"; date = date.split(".").join("").split(", ").slice(1); date[0] = months[date[0].split(" ")[0].toLowerCase()] + " " + date[0].split(" ")[1]; newItem.date = date.join(", "); } if (metaTags["keywords"]) { newItem.tags = Zotero.Utilities.trimInternal(metaTags["keywords"]).split(", "); for (var i in newItem.tags) { if (newItem.tags[i] == "" || newItem.tags[i] == " ") { break; } else { var words = newItem.tags[i].split(" "); for (var j = 0 ; j < words.length ; j++) { Zotero.debug(words[j]); if (words[j][0] == words[j][0].toLowerCase() && words[j][0]) { words[j] = words[j][0].toUpperCase() + words[j].substr(1).toLowerCase(); } } } newItem.tags[i] = words.join(" "); } } if (metaTags["byline"]) { var byline = Zotero.Utilities.trimInternal(metaTags["byline"]); var byline1 = byline.split(" and "); for (var i = 0 ; i < byline1.length ; i++) { var byline2 = byline1[i].split("/"); for (var j = 0 ; j < byline2.length ; j++) { byline2[j] = Zotero.Utilities.trimInternal(byline2[j]); if (byline2[j].indexOf(" ") == -1) { if (byline2[j].length == 2) { newItem.extra = byline2[j]; } else { newItem.extra = byline2[j][0].toUpperCase() + byline2[j].substr(1).toLowerCase(); } } else { byline3 = byline2[j].split(" "); for (var x = 0 ; x < byline3.length ; x++) { byline3[x] = byline3[x][0].toUpperCase() + byline3[x].substr(1).toLowerCase(); } byline3 = byline3.join(" "); newItem.creators.push(Zotero.Utilities.cleanAuthor(byline3, "author")); } } } } newItem.attachments.push({document:doc, title:doc.title}); newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == "x") return namespace; else return null; } : null; var urls = new Array(); if (doc.title == "TIME Magazine - Search Results") { var items = new Array(); var items = Zotero.Utilities.getItemArray(doc, doc.getElementById("search_results").getElementsByTagName("h3"), ''^http://www.time.com/time/.*\.html$''); items = Zotero.selectItems(items); if (!items) { return true; } for (var i in items) { if (i.match("covers") == null) { urls.push(i); } } } else if (doc.evaluate(''//meta[@name="byline"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext() || doc.evaluate(''//div[@class="byline"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext() || doc.evaluate(''//div[@class="copy"]/div[@class="byline"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext() ) { urls.push(doc.location.href); } Zotero.Utilities.processDocuments(urls, function(newDoc) { scrape(newDoc); }, function() { Zotero.done; } ); Zotero.wait(); }'); REPLACE INTO translators VALUES ('b33bbb49-03d2-4175-91c4-3840501bc953', '1.0.0b4.r5', '', '2007-07-31 16:45:00', '1', '100', '4', 'Time-Blog.com', 'Michael Berkowitz', '^http://time-blog.com/', 'function detectWeb(doc, url) { if (url.substr(-4,4) == "html") { return "blogPost"; } else { return "multiple"; } }', 'function scrape(doc, url) { var newItem = new Zotero.Item("blogPost"); newItem.url = doc.location.href; newItem.title = doc.title.substr(0, doc.title.indexOf(" - ")); var titleRE = new RegExp(''^http://time-blog.com/([^/]*)/''); var title = titleRE.exec(doc.location.href)[1].split("_"); for (var i = 0 ; i < title.length ; i++) { title[i] = title[i][0].toUpperCase() + title[i].substr(1).toLowerCase(); } newItem.blogTitle = title.join(" "); var metaTags = new Object(); var metaTagHTML = doc.getElementsByTagName("meta"); for (var i = 0 ; i < metaTagHTML.length ; i++) { metaTags[metaTagHTML[i].getAttribute("name")] = metaTagHTML[i].getAttribute("content"); } if (metaTags["description"]) { newItem.abstractNote = Zotero.Utilities.cleanString(Zotero.Utilities.cleanTags(metaTags["description"])); } if (metaTags["date"]) { var date = metaTags["date"]; var months = new Object(); months["jan"] = "January"; months["feb"] = "February"; months["mar"] = "March"; months["apr"] = "April"; months["may"] = "May"; months["jun"] = "June"; months["jul"] = "July"; months["aug"] = "August"; months["sep"] = "September"; months["oct"] = "October"; months["nov"] = "November"; months["dec"] = "December"; date = date.split(".").join("").split(", "); date[0] = months[date[0].split(" ")[0].toLowerCase()] + " " + date[0].split(" ")[1]; newItem.date = date.join(", "); } if (metaTags["keywords"]) { newItem.tags = metaTags["keywords"].split(", "); for (var i in newItem.tags) { if (newItem.tags[i] == "" || newItem.tags[i] == " ") { break; } else { var words = newItem.tags[i].split(" "); for (var j = 0 ; j < words.length ; j++) { if (words[j][0] == words[j][0].toLowerCase() && words[j][0]) { words[j] = words[j][0].toUpperCase() + words[j].substr(1).toLowerCase(); } } } newItem.tags[i] = words.join(" "); } } if (doc.evaluate(''//span[@class="postedby"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { var byline = Zotero.Utilities.cleanString(doc.evaluate(''//span[@class="postedby"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); if (byline.substr(0,9).toLowerCase() == "posted by") { byline = byline.substr(10).split(" "); } else { byline.split(" "); } for (var i = 0; i < byline.length ; i++) { byline[i] = byline[i][0].toUpperCase() + byline[i].substr(1).toLowerCase(); } newItem.creators.push(Zotero.Utilities.cleanAuthor(byline.join(" "), "author")); } else if (newItem.blogTitle == "Theag") { newItem.creators.push(Zotero.Utilities.cleanAuthor("Matthew Yeomans", "author")); newItem.blogTitle = "the Aggregator"; } Zotero.debug(newItem); newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == "x") return namespace; else return null; } : null; var URIS = new Array(); var xpath = ''//h1[@class="entryTitle"]/a''; var articles = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var art = articles.iterateNext(); var arts = new Array(); var urls = new Array(); while (art) { arts.push(art.textContent); urls.push(art.href); art = articles.iterateNext(); } if (arts.length > 1) { var items = new Object; for (var i = 0; i < arts.length ; i++ ) { items[urls[i]] = arts[i]; } items = Zotero.selectItems(items); for (i in items) { URIS.push(i); } } else { URIS.push(url); } Zotero.Utilities.processDocuments(URIS, scrape, function() { Zotero.done(); } ); Zotero.wait(); }'); REPLACE INTO translators VALUES ('9346ddef-126b-47ec-afef-8809ed1972ab', '1.0.0b4.r5', '', '2008-04-28 17:50:00', '1', '99', '4', 'Institute of Physics', 'Michael Berkowitz', '^http://www.iop.org/EJ/(toc|abstract|search|article)', 'function detectWeb(doc, url) { if ((doc.location.href.indexOf("toc") == -1) && (doc.location.href.indexOf("search") == -1)) { return "journalArticle"; } else { return "multiple"; } }', 'function parseRIS(getURL, pdfURL) { var newGet = getURL.replace(/EJ\/[^/]+/, "EJ/sview") + "?format=refmgr&submit=1"; Zotero.Utilities.HTTP.doGet(newGet, function(text){ // load translator for RIS var translator = Zotero.loadTranslator ("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { item.url = getURL; item.attachments = [ {url:item.url, title:"IOP Snapshot", mimeType:"text/html"} ]; if (pdfURL != null) { item.attachments.push({url:pdfURL, title:"IOP Full Text PDF", mimeType:"application/pdf"}); } item.complete(); }); translator.translate(); Zotero.done(); }, function() {}); Zotero.wait(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == "x") return namespace; else return null; } : null; var arts = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var results = doc.evaluate(''//td[*//td[*//a[contains(text(), "Abstract")]]]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var result; while (result = results.iterateNext()) { var title = doc.evaluate(''.//strong'', result, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; var link = doc.evaluate(''.//a[contains(text(), "Abstract")]'', result, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().href; var pdflink = doc.evaluate(''.//a[contains(text(), "PDF")]'', result, nsResolver, XPathResult.ANY_TYPE, null).iterateNext() ? doc.evaluate(''.//a[contains(text(), "PDF")]'', result, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().href : null; var links = new Array(link, pdflink); items[links] = title; } items = Zotero.selectItems(items); for (var i in items) { arts.push(i); } } else { var pdfurl = doc.evaluate(''//a[contains(text(), "PDF")]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().href; var links = url + '','' + pdfurl; arts = [links]; } for each (var linkset in arts) { var urls = linkset.split('',''); parseRIS(urls[0], urls[1]); } }'); REPLACE INTO translators VALUES ('6ec8008d-b206-4a4c-8d0a-8ef33807703b', '1.0.0b4.r5', '', '2009-01-12 23:40:00', 1, 100, 4, 'The Economist', 'Michael Berkowitz', '^http://(www.)?economist.com/', 'function detectWeb(doc, url) { if (doc.location.href.indexOf("search") != -1) { return "multiple"; } else if (doc.location.href.toLowerCase().indexOf("displaystory") != -1 || doc.location.href.indexOf("cityPage") != -1) { return "magazineArticle"; } }', 'function scrape(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == "x" ) return namespace; else return null; } : null; newItem = new Zotero.Item("magazineArticle"); newItem.ISSN = "0013-0613"; newItem.url = doc.location.href; newItem.publicationTitle = "The Economist"; //get headline var title = new Array(); if (doc.title && doc.title != "" && doc.title != "Economist.com") { title = doc.title.split(" | "); } else { title.push(doc.evaluate(''//div[@class="clear"][@id="pay-barrier"]/div[@class="col-left"]/div[@class="article"]/font/b'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent); } if (title.length == 1) { title.push = title; } else { title = title.slice(0, title.length - 1); title = title.join(": "); } newItem.title = title; if (doc.evaluate(''//div[@class="clear"][@id="pay-barrier"]/div[@class="col-right"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext() ) { newItem.extra = "(Subscription only)"; } //get abstract if (doc.evaluate(''//div[@id="content"]/div[@class="clear top-border"]/div[@class="col-left"]/h2'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext() ) { newItem.abstractNote = doc.evaluate(''//div[@id="content"]/div[@class="clear top-border"]/div[@class="col-left"]/h2'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; } else if (doc.evaluate(''//div[@class="clear"][@id="pay-barrier"]/div[@class="col-left"]/div[@class="article"]/p/strong'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext() ) { newItem.abstractNote = doc.evaluate(''//div[@class="clear"][@id="pay-barrier"]/div[@class="col-left"]/div[@class="article"]/p/strong'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; } else if (doc.evaluate(''//div[@id="content"]/div[@class="clear top-border"]/div[@class="col-left"]/p[3]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { newItem.abstractNote = doc.evaluate(''//div[@id="content"]/div[@class="clear top-border"]/div[@class="col-left"]/p[3]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; } if (newItem.abstractNote) newItem.abstractNote = Zotero.Utilities.trimInternal(newItem.abstractNote); //get date and extra stuff if (doc.evaluate(''//div[@class="col-left"]/p[@class="info"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext() ) { newItem.date = doc.evaluate(''//div[@class="col-left"]/p[@class="info"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.substr(0,13); } var url = doc.location.href; newItem.attachments = [ {url:url.replace("displaystory", "PrinterFriendly"), title:"The Economist Snapshot", mimeType:"text/html"} ]; newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == "x" ) return namespace; else return null; } : null; var urls = new Array(); if (doc.title == "Search | Economist.com") { var items = new Array(); var uris = new Array(); var results = doc.evaluate(''//ol[@class="search-results"]/li/h2/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var headline = results.iterateNext(); while (headline) { items.push(headline.textContent); uris.push(headline.href); headline = results.iterateNext(); } var newItems = new Object(); for (var i = 0 ; i <items.length ; i++) { newItems[items[i]] = uris[i]; } var newItems = Zotero.Utilities.getItemArray(doc, doc, ''^http://(www.)*economist.com/(.*/)*(displaystory.cfm|cityPage.cfm)''); newItems = Zotero.selectItems(newItems); if (!newItems) { return true; } for (var i in newItems) { urls.push(i); } } else if (doc.location.href.toLowerCase().indexOf("displaystory") != -1) { scrape(doc, url); return; } Zotero.Utilities.processDocuments(urls, scrape, function() { Zotero.done(); }); Zotero.wait(); }'); REPLACE INTO translators VALUES ('84bd421d-c6d1-4223-ab80-a156f98a8e30', '1.0.0b4.r1', '', '2007-07-31 16:45:00', '0', '100', '4', 'International Herald Tribune', 'Michael Berkowitz', '^http://(www.)?iht.com/', 'function detectWeb(doc, url) { if (doc.title == "Search - International Herald Tribune" && doc.location.href != "http://www.iht.com/info/nytarchive.php") { return "multiple"; } else { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == "x") return namespace; else return null; } : null; var xpath = ''//meta[@name="Headline"]''; if (doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { return "newspaperArticle"; } } }', 'function associateMeta(newItem, metaTags, field, zoteroField) { if(metaTags[field]) { newItem[zoteroField] = metaTags[field]; } } function scrape(doc, url) { var newItem = new Zotero.Item("newspaperArticle"); newItem.publicationTitle = "The International Herald Tribune"; newItem.ISSN = "0294-8052"; newItem.url = doc.location.href; var metaTags = new Object(); var metaTagHTML = doc.getElementsByTagName("meta"); for (var i = 0 ; i < metaTagHTML.length ; i++) { metaTags[metaTagHTML[i].getAttribute("name")] = Zotero.Utilities.cleanTags(metaTagHTML[i].getAttribute("content")); } associateMeta(newItem, metaTags, "Headline", "title"); associateMeta(newItem, metaTags, "PrintPubDate", "date"); associateMeta(newItem, metaTags, "Summary", "abstractNote"); associateMeta(newItem, metaTags, "ArticleID", "accessionNumber"); associateMeta(newItem, metaTags, "Owner", "extra"); if (metaTags["Author"]) { var author = Zotero.Utilities.cleanString(metaTags["Author"]); if (author.substr(0,3).toLowerCase() == "by ") { author = author.substr(3); } var authors = author.split(" and "); for each(var author in authors) { var words = author.split(" "); for (var i in words) { words[i] = words[i][0].toUpperCase() + words[i].substr(1).toLowerCase(); } author = words.join(" "); newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author")); } } if (metaTags["keywords"]) { var keywords = metaTags["keywords"]; newItem.tags = keywords.split(","); if (newItem.tags[0].toLowerCase()) { newItem.tags = newItem.tags.slice(1, newItem.tags.length); } Zotero.debug(newItem.tags); for (var i in newItem.tags) { if (newItem.tags[i] != "") { newItem.tags[i] = Zotero.Utilities.cleanString(newItem.tags[i].replace(" ", ", ")); var words = newItem.tags[i].split(" "); for (var j = 0 ; j < words.length ; j++) { if (words[j][0] == words[j][0].toLowerCase()) { words[j] = words[j][0].toUpperCase() + words[j].substr(1).toLowerCase(); } } newItem.tags[i] = words.join(" "); } } } newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == "x" ) return namespace; else return null; } : null; var uris = new Array(); if (doc.title == "Search - International Herald Tribune") { var result = doc.evaluate(''//td[@class="searchheadline"]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var items = new Array(); var elmt = result.iterateNext(); while (elmt) { items.push(elmt.href); elmt = result.iterateNext(); } var items = Zotero.Utilities.getItemArray(doc, doc, ''^http://(www.)*iht.com/articles/.*\.php$''); items = Zotero.selectItems(items); if (!items) { return true; } for (var i in items) { uris.push(i); } } else if (doc.evaluate(''//meta[@name="Headline"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { uris.push(url); } Zotero.Utilities.processDocuments(uris, scrape, function() { Zotero.done(); }); Zotero.wait(); } '); REPLACE INTO translators VALUES ('631ff0c7-2e64-4279-a9c9-ad9518d40f2b', '1.0.0b4.r5', '', '2007-08-14 22:15:00', '0', '100', '4', 'Stuff.co.nz', 'Michael Berkowitz', '^http://(www.)?stuff.co.nz/', 'function detectWeb(doc, url) { if ((doc.location.href.indexOf("search-results") != -1) || (doc.location.href.indexOf("/blogs/blogs/") != -1 )) { return "multiple"; } else if ((doc.location.href.indexOf("blogs") != -1) && (url != "http://www.stuff.co.nz/blogs/blogs") && (url != "http://stuff.co.nz/blogs/blogs")) { return "blogPost"; } else if (doc.location.href.indexOf("html") == (doc.location.href.length - 4)){ return "newspaperArticle"; } }', 'function scrape(doc, url) { if (doc.location.href.indexOf("html") != -1) { var newItem = new Zotero.Item("newspaperArticle"); newItem.url = doc.location.href; newItem.publicationTitle = "Stuff.co.nz"; newItem.title = doc.title.split(" - ")[0]; //abstract var xpath = ''//div[@id="leftcol_story"]/p/strong''; newItem.abstractNote = Zotero.Utilities.cleanString(doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); //date and author var xpath = ''//div[@id="story_headline"]''; var info = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent.split(/\n+/)[2].split(" | "); newItem.date = Zotero.Utilities.cleanString(info[1].split(",")[1]); var author = Zotero.Utilities.cleanString(info[0]); if (author.substr(0,2).toLowerCase() == "by") { author = author.substr(3); if (author.indexOf(" - ") != -1) { author = author.split(" - ")[0].split(" "); } else { author = author.split(" "); } for (var i = 0 ; i < author.length ; i++) { author[i] = author[i][0] + author[i].substr(1).toLowerCase(); var creator = author.join(" "); } newItem.creators.push(Zotero.Utilities.cleanAuthor(creator, "author")); } else { newItem.extra = author; } } else if (doc.location.href.indexOf("blogs") != -1) { var newItem = new Zotero.Item("blogPost"); newItem.url = doc.location.href; //post title var xpath = ''//div[@class="post"]/h2[@class="storytitle"]/a''; newItem.title = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent; //date and author var xpath = ''//div[@class="meta"][@id="postdate"]'' var info = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent.split(" | "); var byline = Zotero.Utilities.cleanString(info[0]).split(" in "); newItem.creators.push(Zotero.Utilities.cleanAuthor(byline[0], "author")); newItem.blogTitle = byline[1]; var date = Zotero.Utilities.cleanString(info[1]).split("m "); newItem.date = date[1]; } newItem.complete(); } function doWeb(doc, url) { var URLS = new Array(); //multiple if ((url.indexOf("search-results") != -1) || (url.indexOf("blogs/blogs/") != -1)) { if (url.indexOf("search-results") != -1) { var xpath = ''//div[@id="leftcol_story"]/p/a''; } else if (url.indexOf("blogs/blogs/") != -1) { var xpath = ''//h2[@class="storytitle"]/a''; } var items = new Object(); var titles = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null); var newTitle = titles.iterateNext(); while (newTitle) { items[newTitle.href] = newTitle.textContent; newTitle = titles.iterateNext(); } items = Zotero.selectItems(items); for (var i in items) { URLS.push(i); } } else { URLS.push(url); } Zotero.Utilities.processDocuments(URLS, scrape, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('efb3c424-daa9-40c9-8ee2-983d2802b27a', '1.0.0b4.r5', '', '2007-08-14 22:15:00', '0', '100', '4', 'The Age', 'Michael Berkowitz', '^http://(www|search).theage.com.au/', 'function detectWeb(doc, url) { if (url.indexOf("siteSearch.ac") != -1) { return "multiple"; } else if (url.indexOf("html") != -1) { return "newspaperArticle"; } }', 'function scrape(url) { Zotero.Utilities.HTTP.doGet(url, function(text) { var newItem = new Zotero.Item("newspaperArticle"); newItem.ISSN = "0312-6307"; newItem.url =url; newItem.publicationTitle = "The Age"; Zotero.debug(url); //title var t = /<HEADLINE>(.*)<\/HEADLINE>/; newItem.title = Zotero.Utilities.unescapeHTML(Zotero.Utilities.capitalizeTitle(text.match(t)[1]).split(" - ")[0]); //meta tags? (except abstract, for some reason) var m = /name=\"(.*)\"\s+content=\"(.*)\"\s+\/>/g; var metaTags = text.match(m); var metaInfo = new Object(); var metaNames = new Array(); var m2 = /name=\"(.*)\"\s+content=\"(.*)\"\s+\/>/; for (var i = 0 ; i < metaTags.length ; i++) { var stuff = metaTags[i].match(m2); metaInfo[stuff[1]] = stuff[2]; metaNames.push(stuff[1]); } for (var i = 0 ; i <metaNames.length ; i++) { if (metaNames[i] == "sitecategories") { newItem.section = metaInfo[metaNames[i]].split(",")[0]; } else if (metaNames[i] == "publishdate") { newItem.date = metaInfo[metaNames[i]].split(/\s+/)[0]; } else if (metaNames[i] == "byline") { var byline = metaInfo[metaNames[i]].split(",")[0]; if (byline.indexOf(" and ") != -1) { byline = byline.split(" and "); for (var j = 0 ; j < byline.length ; j++) { newItem.creators.push(Zotero.Utilities.cleanAuthor(byline[j], "author")); } } else { newItem.creators.push(Zotero.Utilities.cleanAuthor(byline, "author")); } } else if (metaNames[i] == "keywords") { var keywords = metaInfo[metaNames[i]].split(","); for (var k = 0 ; k < keywords.length ; k++) { if (keywords[k].length > 1) { newItem.tags.push(Zotero.Utilities.unescapeHTML(keywords[k][0].toUpperCase() + keywords[k].substr(1).toLowerCase())); } } } } //abstract var a = /\"Description\"\s+content=\"([^\"]*)\"/; newItem.abstractNote = Zotero.Utilities.unescapeHTML(text.match(a)[1].substring(0, text.match(a)[1].length - 3)); newItem.complete(); Zotero.done(); }, function() {}); } function doWeb(doc, url) { var URLS = new Array(); if (url.indexOf("siteSearch.ac") != -1) { var xpath = ''//div[@class="searchresults"]/dl/dt/a''; var titles = new Object(); var stuff = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null); var newest = stuff.iterateNext(); while (newest) { titles[newest.href] = newest.textContent; newest = stuff.iterateNext(); } var items = Zotero.selectItems(titles); for (var i in items) { URLS.push(i.split("u=")[1].replace(/%3A/g,":").replace(/%2F/g,"/").split("&")[0]); } } else { URLS.push(url); } Zotero.debug(URLS); Zotero.Utilities.HTTP.doPost(URLS, "", function(text) { for (var i = 0 ; i < URLS.length ; i++) { scrape(URLS[i]); } }); Zotero.wait(); }'); REPLACE INTO translators VALUES ('c7830593-807e-48cb-99f2-c3bed2b148c2', '1.0.0b4.r5', '', '2007-08-14 22:15:00', '1', '100', '4', 'New Zealand Herald', 'Michael Berkowitz', '^http://(www|search).nzherald.co.nz/', 'function detectWeb(doc, url) { if (doc.title.indexOf("Search Results") != -1) { return "multiple"; } else if (doc.location.href.indexOf("story.cfm") != -1) { return "newspaperArticle"; } }', 'function scrape(url) { Zotero.Utilities.HTTP.doGet(url, function(text) { var newItem = new Zotero.Item("newspaperArticle"); newItem.url = url; newItem.publicationTitle = "New Zealand Herald"; //author? var aut = /<a href=\"\/author\/[^>]*>(.*)<\/a>/; if (text.match(aut)) { var author = text.match(aut)[1]; newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author")); } //abstract var a = /meta name=\"description\" content=\"([^&]*)/; newItem.abstractNote = text.match(a)[1]; //title and date var t = /<title>(.*)<\/title>/; var result = text.match(t)[1].split(" - "); newItem.title = result[0]; newItem.date = result[1]; //keywords var k = /<meta name=\"keywords\" content=\"(.*)\"/; var kwords = Zotero.Utilities.cleanString(text.match(k)[1]).split(", "); for (var i = 0 ; i < kwords.length ; i++) { newItem.tags.push(kwords[i]); } //section var s = /class=\"current\"><.*><span>(.*)<\/span>/; newItem.section = text.match(s)[1]; newItem.complete(); Zotero.debug(newItem); Zotero.done(); }, function() {}); } function doWeb(doc, url) { var articles = new Array(); var names = new Array(); if (doc.title.indexOf("Search Results:") != -1) { var URLS = new Array(); var titles = new Array(); var xpath = ''//p[@class="g"]/a''; var links = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null); var link = links.iterateNext(); while (link) { URLS.push(link.href); titles.push(link.textContent); link = links.iterateNext(); } Zotero.debug(titles); Zotero.debug(URLS); var newItems = new Object(); for (var i = 0 ; i < titles.length ; i++) { newItems[URLS[i]] = titles[i]; } newItems = Zotero.selectItems(newItems); Zotero.debug(newItems); for (var i in newItems) { articles.push(i); names.push(newItems[i]); } } else { articles.push(doc.location.href); names.push(Zotero.Utilities.cleanString(doc.title.split("-")[0])); } Zotero.debug(articles); Zotero.Utilities.HTTP.doPost(articles, "", function(text) { for (var i = 0 ; i < articles.length ; i++) { scrape(articles[i]); } }); Zotero.wait(); }'); REPLACE INTO translators VALUES ('19120a71-17a8-4629-936a-ccdf899b9861', '1.0.0b4.r5', '', '2007-08-14 22:15:00', '1', '99', '4', 'Sydney Morning Herald', 'Michael Berkowitz', '^http://(www|search).smh.com.au/(news|siteSearch|articles)', 'function detectWeb(doc, url) { if (doc.location.href.indexOf("news") != -1 || doc.location.href.indexOf("articles") != -1) { return "newspaperArticle"; } else if (doc.location.href.indexOf("siteSearch") != -1) { return "multiple"; } }', 'function regexMeta(str, item) { var re = /name=\"(.*)\"\s+content=\"(.*)\"\s+\/>/; var stuff = str.match(re); if (stuff[1] == "byline") { authors = stuff[2].split(" and "); for (var i = 0 ; i < authors.length ; i++) { item.creators.push(Zotero.Utilities.cleanAuthor(authors[i].split(" in ")[0], "author")); } } else if (stuff[1] == "sitecategories") { item.section = stuff[2]; } else if (stuff[1] == "publishdate") { item.date = stuff[2].split(/\s+/)[0]; } } function doWeb(doc, url) { var articles = new Array(); if (doc.location.href.indexOf("siteSearch") != -1) { var items = new Array(); var xpath = ''//div[@class="searchresults"]/dl/dt/a''; var stuff = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null); var thing = stuff.iterateNext(); while (thing) { items[thing.href] = thing.textContent; thing = stuff.iterateNext(); } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles.push(url); } for (var i = 0 ; i < articles.length ; i++) { var url = articles[i] Zotero.Utilities.HTTP.doGet(url, function(text) { var newItem = new Zotero.Item("newspaperArticle"); newItem.publicationTitle = "Sydney Morning Herald"; newItem.url = url; newItem.ISSN = "0312-6315"; //title var t = /<HEADLINE>(.*)<\/HEADLINE>/; newItem.title = Zotero.Utilities.unescapeHTML(Zotero.Utilities.capitalizeTitle(text.match(t)[1])); //hooray for real meta tags! var meta = /<meta\s+name=(.*)\/>/g; var metaTags = text.match(meta); for (var i = 0 ; i <metaTags.length ; i++) { regexMeta(metaTags[i], newItem); } //abstract var abs = /meta name=\"Description\" content=\"([^\"]*)\"/; var abstract = text.match(abs)[1].split(/\s+/); abstract[0] = abstract[0][0] + abstract[0].substr(1).toLowerCase(); abstract = abstract.join(" "); newItem.abstractNote = Zotero.Utilities.unescapeHTML(abstract.substr(0, abstract.length - 3)); newItem.complete(); Zotero.done(); }, function() {}); } Zotero.wait(); }'); REPLACE INTO translators VALUES ('393afc28-212d-47dd-be87-ec51bc7a58a4', '1.0.0b3.r1', '', '2007-08-14 22:20:00', '1', '100', '4', 'The Australian', 'Michael Berkowitz', '^http://(searchresults|www.theaustralian).news.com.au/', 'function detectWeb(doc, url) { if (url == "http://searchresults.news.com.au/servlet/Search" || url.indexOf("siteSearch") != -1) { return "multiple"; } else if (url.indexOf("story") != -1) { return "newspaperArticle"; } }', 'function scrape(url) { Zotero.Utilities.HTTP.doGet(url, function(text) { var newItem = new Zotero.Item("newspaperArticle"); newItem.url = url; newItem.publicationTitle = "The Australian"; //title var t = /<title>(.*)<\/title>/; newItem.title = Zotero.Utilities.capitalizeTitle(text.match(t)[1].split(" | ")[0]); //abstract var abs = /meta name=\"description\"\s+content=\"(.*)\"/; var abstract = Zotero.Utilities.unescapeHTML(text.match(abs)[1]).split(" "); abstract[0] = abstract[0][0] + abstract[0].substr(1).toLowerCase(); newItem.abstractNote = abstract.join(" "); //tags var t = /meta name=\"keywords\"\s+content=\"(.*)\"/; var tags = text.match(t)[1].split(/,\s+/); for (var i = 0 ; i < tags.length ; i++) { newItem.tags.push(Zotero.Utilities.unescapeHTML(tags[i])); } //section var sec = /active\"><a[^>]*>(.*)<\/a>/; if (text.match(sec)) { newItem.section = text.match(sec)[1]; } //timestamp var t = /<em class=\"timestamp\">(.*)<\/em>/; newItem.date = text.match(t)[1]; //byline var by = /<div\s+class=\"module-subheader\"><p>(.*)/; if (text.match(by)[1]) { var byline = text.match(by)[1]; var authors = new Array(); if (byline.indexOf(",") != -1) { byline = byline.split(",")[0]; } if (byline.indexOf(" and ") != -1) { var authors = byline.split(" and "); } else { authors.push(byline); } for (var i = 0 ; i < authors.length ; i++) { newItem.creators.push(Zotero.Utilities.cleanAuthor(authors[i], "author")); } } newItem.complete(); Zotero.debug(newItem); Zotero.done(); }, function() {}); } function doWeb(doc, url) { var URLS = new Array(); var newItems = new Object(); if (url == "http://searchresults.news.com.au/servlet/Search") { var articles = new Array(); var xpath = ''//ol/li/h4[@class="heading"]/a''; //var titles = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null); newItems = Zotero.Utilities.getItemArray(doc, doc.getElementsByTagName("h4"), /^http:\/\//); newItems = Zotero.selectItems(newItems); } else { newItems[url] = doc.title.split(" | ")[0]; } for (var i in newItems) { URLS.push(i); } Zotero.debug(URLS); Zotero.Utilities.HTTP.doPost(URLS, "", function(text) { for (var i = 0 ; i < URLS.length ; i++) { scrape(URLS[i]); } }); }'); REPLACE INTO translators VALUES ('303bdfc5-11b8-4107-bca1-63ca97701a0f', '1.0.0b3.r1', '', '2007-09-06 19:30:00', '0', '100', '4', 'ASCE', 'Michael Berkowitz', '^http://ascelibrary.aip.org/.+', 'function detectWeb(doc, url) { if (doc.evaluate(''//div[@id="sr-content-wrap"]//div[@class="sr-right"]/p[@class="sr-art-title"]/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else { return "journalArticle"; } }', 'function getRIS(doc, url) { var newx = ''//div[@id="sci-art-options-box"]//input[@name="SelectCheck"]''; var key = doc.evaluate(newx, doc, null, XPathResult.ANY_TYPE, null).iterateNext().value; Zotero.debug(key); var citation = ''http://ascelibrary.aip.org/getabs/servlet/GetCitation?source=scitation&PrefType=ARTICLE&PrefAction=Add+Selected&SelectCheck='' + key + ''&fn=open_refworks&downloadcitation=+Go+''; Zotero.Utilities.HTTP.doGet(citation, function(text) { var translator = Zotero.loadTranslator("import"); text = text.replace(/RT/, "TY"); text = text.replace(/VO/, "VL"); text = text.replace(/LK/, "UR"); text = text.replace(/YR/, "PY"); Zotero.debug(text); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text.replace(/([A-Z][A-Z\d]\s)/g, "$1 - ")); translator.setHandler("itemDone", function(obj, item) { item.attachments = [ {url:item.url, title:"ASCE Snapshot", mimeType:"text/html"}, {url:"http://ascelibrary.aip.org/getpdf/servlet/GetPDFServlet?filetype=pdf&id=" + key + "&idtype=cvips&prog=search", title:"EAS Full Text PDF", mimeType:"application/pdf"} ]; //item.itemType = "journalArticle"; item.complete(); }); translator.translate(); Zotero.wait(); Zotero.done(); }); } function doWeb(doc, url) { var articles = new Array(); var items = new Object(); var xpath = ''//div[@class="sr-right"]/p[@class="sr-art-title"]/a''; if (doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { var titles = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null); while (new_title = titles.iterateNext()) { items[new_title.href] = new_title.textContent; } items = Zotero.selectItems(items); for (var i in items) { articles.push(i) } } else { var newx = ''//div[@id="sci-art-options-box"]//input[@name="SelectCheck"]''; var stuff = doc.evaluate(newx, doc, null, XPathResult.ANY_TYPE, null).iterateNext().value; Zotero.debug(stuff); articles.push(url); } Zotero.debug(articles); Zotero.Utilities.processDocuments(articles, getRIS, function() {Zotero.done}); Zotero.wait(); } '); REPLACE INTO translators VALUES ('5af42734-7cd5-4c69-97fc-bc406999bdba', '1.0.0b4.r5', '', '2008-07-10 06:15:00', '1', '100', '4', 'ESA Journals', 'Michael Berkowitz', 'http://www.esajournals.org/', 'function detectWeb(doc, url) { if (url.indexOf("get-toc") != -1 || url.indexOf("searchtype") != -1) { return "multiple"; } else if (url.indexOf("get-document") != -1 || url.indexOf("get-abstract") != -1) { return "journalArticle"; } }', 'function senCase(string) { var smallwords = Array("AND", "A", "IN", "THE", "BY", "OF"); var sen = string.split(/\b/); for (var i = 0 ; i < sen.length; i++) { if (sen[i].match(/\w+/)) { if (smallwords.indexOf(sen[i]) != -1 && i != 0) { sen[i] = sen[i].toLowerCase(); } else { sen[i] = sen[i][0] + sen[i].substring(1).toLowerCase(); } } } return sen.join(""); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var resultItems = doc.evaluate(''//div[@class="nocolumn"][@id="content"]/div//*[@class="group"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var next_item; while (next_item = resultItems.iterateNext()) { var link = doc.evaluate(''.//a[1]'', next_item, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().href; var title = senCase(doc.evaluate(''.//*[@class="title"]'', next_item, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent); items[link] = title; } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles.push(url); } Zotero.Utilities.processDocuments(articles, function(newDoc) { var newlink = newDoc.evaluate(''//a[text() = "Create Reference"]'', newDoc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().href; var itemurl = newDoc.location.href; if (newDoc.evaluate(''//a[text() = "Full Text"]'', newDoc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { itemurl = newDoc.evaluate(''//a[text() = "Full Text"]'', newDoc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().href; } if (newDoc.evaluate(''//div[@class="doc-head"]/p[contains(text(), "DOI")][@class="info"]'', newDoc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var doi = newDoc.evaluate(''//div[@class="doc-head"]/p[contains(text(), "DOI")][@class="info"]'', newDoc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; doi = Zotero.Utilities.trimInternal(doi.substr(4)); } var issn = newDoc.evaluate(''//div[@id="pageTitle"]/p/a'', newDoc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().href.match(/issn=([^&]+)/)[1]; newlink = newlink.replace(''cite-builder'', ''download-citation&t=refman&site=esaonline''); Zotero.Utilities.HTTP.doGet(newlink, function(text) { // load translator for RIS var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { item.url = decodeURIComponent(itemurl); if (doi) item.DOI = decodeURIComponent(doi); var bits = new Array(issn, item.volume, item.issue); var pdfurl = ''http://www.esajournals.org/archive/'' + bits.join("/") + "/pdf/i" + bits.join("-") + "-" + item.pages.match(/\d+/)[0] + ".pdf"; item.attachments = [ {url:item.url, title:"ESA Journals Snapshot", mimeType:"text/html"}, {url:pdfurl, title:"ESA Full Text PDF", mimeType:"application/pdf"} ]; item.complete(); }); translator.translate(); Zotero.done(); }); }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('1f40baef-eece-43e4-a1cc-27d20c0ce086', '1.0.0b4.r1', '', '2007-07-31 19:40:00', '1', '100', '4', 'Engineering Village', 'Ben Parr', '^https?://(?:www\.)?engineeringvillage(2)?\.(?:com|org)', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var xpath=''//a[img/@style="vertical-align: middle;"][@href]''; if(doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE,null).iterateNext()) { return "journalArticle";} xpath=''//input[@name="cbresult"]/@onclick''; if(doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE,null).iterateNext()) { return "multiple";} return null; }', 'function parseRIS(uris) { Zotero.Utilities.HTTP.doGet(uris, function(text){ // load translator for RIS var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.translate(); Zotero.done(); }, function() {}); Zotero.wait(); } //creates the link to the RIS file function createURL(EISESSION,docidlist,curURL) { var milli = (new Date()).getTime(); var temp = curURL.split(''/''); var url = temp.slice(0,temp.length-1).join(''/'') + "/Controller?EISESSION="+EISESSION; url+="&CID=downloadSelectedRecordsris&format=ris&displayformat=fullDoc×tamp=" url+=milli; url+="&docidlist="; url+=docidlist; url+="&handlelist=1"; return url; } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var url; var xpath=''//a[img/@style="vertical-align: middle;"][@href]''; if(doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE,null).iterateNext()) { xpath=''//a[@class="MedBlueLink"][img]/@onclick''; var temp=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE,null).iterateNext(); var docidlist=temp.value; docidlist=docidlist.split("MID=")[1]; docidlist=docidlist.split("&")[0]; xpath=''//a[img/@style="vertical-align: middle;"][@href]''; temp=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE,null).iterateNext(); var EISESSION =temp.href; EISESSION=EISESSION.split("(''")[1]; EISESSION=EISESSION.split("''")[0]; url=createURL(EISESSION,docidlist,doc.location.href); parseRIS(url); } else { xpath=''//input[@NAME="sessionid"]''; var EISESSION=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE,null).iterateNext().value; xpath=''//input[@name="cbresult"]/@onclick''; var items=new Array(); var rows=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE,null); var xpath2=''//a[@class="MedBlackText"]/b''; xpath2=doc.evaluate(xpath2, doc, nsResolver,XPathResult.ANY_TYPE,null); var title; var docidlist; while(row=rows.iterateNext()) { docidlist=row.value; docidlist=docidlist.split("''")[1]; url=createURL(EISESSION,docidlist,doc.location.href); title=xpath2.iterateNext(); title=title.textContent; items[url]=title; } items = Zotero.selectItems(items); if(!items) return true; var dois=""; var theurls= new Array(); for(var thelink in items) { theurls.push(thelink); } parseRIS(theurls); } }'); REPLACE INTO translators VALUES ('13b9f6fe-ded7-4f91-8c55-5d6ce64fb43e', '1.0.0b4.r1', '', '2007-06-27 02:00:00', '0', '100', '4', 'SPIE Digital Library', 'Asa Kusuma', '^https?://spiedigitallibrary\.aip\.org/', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var singXpath = ''//input[@name="SelectCheck"][@type="hidden"]''; var multXpath = ''//input[@name="SelectCheck"][@type="checkbox"]''; //var str=doc.evaluate(singXpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; //Zotero.debug("StRRRr: "+str); if (doc.evaluate(multXpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } if (doc.evaluate(singXpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { return "journalArticle"; } } ', 'function parseRIS(uris) { Zotero.debug("Begin parsing RIS"); Zotero.Utilities.HTTP.doGet(uris, function(text){ // load translator for RIS var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.translate(); Zotero.done(); }, function() {}); Zotero.wait(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var singXpath = ''//input[@name="SelectCheck"][@type="hidden"]''; var multXpath = ''//input[@name="SelectCheck"][@type="checkbox"]''; if (doc.evaluate(multXpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { //multiple Zotero.debug("Multiple Step 1"); var searchtitle = ''//tbody/tr/td/table/tbody/tr[2]/td/font/b''; var bibXpath = ''//input[@name="SelectCheck"][@type="checkbox"]''; var pagetype=""; //Checks what type of multiple page it is, search or browse. if(doc.evaluate(searchtitle, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var titleXpath=''//a/b''; pagetype="search"; Zotero.debug("Found a search page"); } else { var titleXpath=''//ul/strong''; Zotero.debug("Found a browse page"); pagetype="browse"; } var bibElmts = doc.evaluate(bibXpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var titleElmts = doc.evaluate(titleXpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var titleElmt; var bibElmt; bibElmt = bibElmts.iterateNext(); titleElmt = titleElmts.iterateNext(); var items = new Array(); Zotero.debug("Multiple Step 2"); do { Zotero.debug("SelectCheck: "+bibElmt.value); items[bibElmt.value] = Zotero.Utilities.cleanString(titleElmt.textContent); if(pagetype=="search") { titleElmt = titleElmts.iterateNext(); } } while((bibElmt = bibElmts.iterateNext()) && (titleElmt = titleElmts.iterateNext())); items = Zotero.selectItems(items); if(!items) return true; var bibcodes=""; var uris = new Array(); for(var bibcode in items) { Zotero.debug("Export SelectCheck: "+bibcode); var getURL = "http://spiedigitallibrary.aip.org/getabs/servlet/GetCitation?fn=view_isi&source=scitation&PrefType=ARTICLE&PrefAction=Add+Selected&SelectCheck="; getURL=getURL + bibcode + "&downloadcitation=+Go+"; Zotero.debug(getURL); uris.push(getURL); } parseRIS(uris); } if (doc.evaluate(singXpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { singXpath = ''//input[@name="SelectCheck"][@type="hidden"]''; var selectid=doc.evaluate(singXpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().value; Zotero.debug("Node Value: "+selectid); //single var url="http://spiedigitallibrary.aip.org/getabs/servlet/GetCitation?fn=view_isi&source=scitation&PrefType=ARTICLE&PrefAction=Add+Selected&SelectCheck="; //PSISDG001207000001000088000001 url = url+selectid; url = url + "&downloadcitation=+Go+"; var idarray = new Array(); idarray.push(url); parseRIS(idarray); } }'); REPLACE INTO translators VALUES ('ab961e61-2a8a-4be1-b8a3-044f20d52d78', '1.0.0b4.r1', '', '2007-07-31 16:45:00', '0', '100', '4', 'BIBSYS', 'Ramesh Srigiriraju', '^http://ask\.bibsys\.no/ask/action', 'function detectWeb(doc, url) { var multireg=new RegExp("^http://ask\.bibsys\.no/ask/action/result"); if(multireg.test(url)) return "multiple"; var singlereg=new RegExp("^http://ask\.bibsys\.no/ask/action/show"); if(singlereg.test(url)) return "book"; }', 'function doWeb(doc, url) { var namespace=doc.documentElement.namespaceURI; var nsResolver=namespace?function(prefix) { return (prefix=="x")?namespace:null; }:null; var multireg=new RegExp("http://ask\.bibsys\.no/ask/action/result"); if(multireg.test(url)) { var titlpath=''//tr/td[@width="49%"][@align="left"][@valign="top"]/a/text()''; var titles=doc.evaluate(titlpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var codepath=''//tr/td/input[@type="checkbox"][@name="valg"]/@value''; var codes=doc.evaluate(codepath, doc, nsResolver, XPathResult.ANY_TYPE, null); var items=new Array(); var title; titles.iterateNext(); while(title=titles.iterateNext()) items[codes.iterateNext().nodeValue]=title.nodeValue; items=Zotero.selectItems(items); var string="http://ask.bibsys.no/ask/action/result?control=ctr_top"; for(var codes in items) string+="&valg="+codes; string+="&control=ctr_bottom&eksportFormat=refmanager&eksportEpostAdresse=&eksportEpostFormat=fortekst&cmd=sendtil"; Zotero.Utilities.HTTP.doGet(string, function(text) { var trans=Zotero.loadTranslator("import"); trans.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); trans.setString(text); trans.translate(); Zotero.done(); }); Zotero.wait(); } var singlereg=new RegExp("http://ask\.bibsys\.no/ask/action/show"); if(singlereg.test(url)) { var urlstring="http://ask.bibsys.no/ask/action/show"; var data="visningsformat=fortekst_m_eksemplarer&eksportFormat=refmanager&eksportEpostAdresse=&eksportEpostFormat=fortekst&cmd=sendtil"; Zotero.Utilities.HTTP.doPost(urlstring, data, function(text) { var trans=Zotero.loadTranslator("import"); trans.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); trans.setString(text); trans.translate(); Zotero.done(); }); Zotero.wait(); } }'); REPLACE INTO translators VALUES ('f4130157-93f7-4493-8f24-a7c85549013d', '1.0.0b4.r1', '', '2007-08-27 05:00:00', '0', '100', '4', 'BBC', 'Ben Parr', '^https?://(?:www|news?)\.bbc\.co.uk', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var xpath; xpath=''//meta[@name="Headline"]''; if(content=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null).iterateNext()) { return "newspaperArticle"; } xpath=''//font[@class="poshead"]/b''; if(doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null).iterateNext()) { return "newspaperArticle"; } return null; }', 'function scrape(doc,url,title) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var newItem = new Zotero.Item("newspaperArticle"); newItem.url=url; newItem.repository="bbc.co.uk"; newItem.publicationTitle="BBC"; newItem.title=title; xpath=''//meta[@name="OriginalPublicationDate"]/@content''; var temp=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null).iterateNext(); if(temp) { temp=temp.value; temp=temp.split(" ")[0]; newItem.date=temp; } else { xpath=''//font[@class="postxt"][@size="1"]''; var rows=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null); var row; while(row=rows.iterateNext()) { temp=row.textContent; if(temp.substr(0,9)=="Created: ") { newItem.date=temp.substr(9); break; } } } xpath=''//meta[@name="Section"]/@content''; temp=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null).iterateNext(); if(temp) { newItem.section=temp.value; } xpath=''//meta[@name="Description"]/@content''; temp=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null).iterateNext(); if(temp) { newItem.abstractNote=temp.value; } else { xpath=''//meta[@name="description"]/@content''; temp=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null).iterateNext(); if(temp) { newItem.abstractNote=temp.value; } } newItem.attachments.push({url:url, title:"BBC News Snapshot",mimeType:"text/html"}); newItem.complete(); } function doWeb(doc,url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var xpath=''//meta[@name="Headline"]/@content''; var title; if(title=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null).iterateNext()) { scrape(doc,url,title.value) } else { xpath=''//font[@class="poshead"]/b''; if(title=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null).iterateNext()) { scrape(doc,url,title.textContent) } } }'); REPLACE INTO translators VALUES ('dbb5d4bc-3b21-47a2-9751-5dcbb65b902a', '1.0.0b4.r1', '', '2007-07-31 16:45:00', '0', '100', '4', 'AMS Online Journals - Allenpress', 'Ben Parr', '^http://ams.allenpress.com/', 'function detectWeb(doc,url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var xpath; //Homepage=AMS Top 20 var temp=url.split("request=")[1]; if(temp) { if(temp.substr(0,10)=="index-html") { return "multiple"; } } //browse page xpath=''//div[@class="group"]/p[@class="title"]''; if(doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } //second browse page format xpath=''//div[@class="toc include j"]/p/span[@class="title"]''; if(doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } //search page xpath=''//td[@class="search"]/span[@class="title"]''; if(doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } //single page xpath=''//ul/li/a''; var rows=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null); var row; while(row=rows.iterateNext()) { if(row.textContent=="Create Reference") { return "journalArticle"; } } }', 'function parseRIS(temp,PDFs) { Zotero.Utilities.HTTP.doGet(temp, function(text){ // load translator for RIS var translator = Zotero.loadTranslator("import"); translator.setHandler("itemDone", function(obj, newItem) { //get doi of the item we''re currently saving from RIS file var doi=newItem.DOI; if(!doi) {doi=newItem.url.replace(''http://dx.doi.org/'','''');} else {doi=doi.replace("doi%3A","");} var urlstring=''''; var volume=newItem.volume; var issue=newItem.issue; var d=newItem.pages.split("-")[0]; var pdf = PDFs.shift(); if(pdf) { if(pdf=="0") { var b=doi.split("/"); if(b.length>1) {b=b[1];} else {b=doi.split("%2F")[1];} b=b.split("(")[0]; b=b.split("%28")[0]; if(!b||b.length!=9) {b="1520-0477";} urlstring="http://ams.allenpress.com/archive/"+b+"/"+volume+"/"+issue+"/pdf/i"+b+"-"+volume+"-"+issue+"-"+d+".pdf"; } else if(pdf=="1") { while(volume.length<3) {volume="0"+volume;} while(issue.length<2) {issue="0"+issue;} while(d.length<4) {d="0"+d;} urlstring="http://docs.lib.noaa.gov/rescue/mwr/"+volume+"/mwr-"+volume+"-"+issue+"-"+d+".pdf"; } } newItem.attachments[0]={ title:"AMS Journals Full Text PDF", url:urlstring, mimeType:"application/pdf"} if(Zotero.Utilities.cleanString(newItem.abstractNote).toLowerCase()=="no abstract available.") {newItem.abstractNote='''';} newItem.complete(); }); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.translate(); Zotero.done(); }, function() {}); Zotero.wait(); } function createLink(link) { var url="http://ams.allenpress.com/perlserv/?request=download-citation&t=refman&doi="; url+=getdoi(link); url+="&site=amsonline"; return url; } function getdoi(link) { doi=link.split("doi%3A")[1]; if(!doi) { doi=link.split("doi=")[1]; return doi; } return doi; } function getType(text) { if(text.indexOf("(")>-1) {return "0";} else {return "1";} } function doWeb(doc,url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var doi; var PDFs=new Array(); var xpath=''//ul/li/a''; var rows=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null); var row; while(row=rows.iterateNext()) { if(row.textContent=="Create Reference") { //single page var thelink=createLink(row.href); xpath=''//div[@class="mainPadding"]/div/div/div/div/div/p/a''; rows=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null); while(row=rows.iterateNext()) { if(row.textContent.toLowerCase().indexOf("pdf")>-1) {PDFs.push(getType(row.textContent));} } parseRIS(thelink,PDFs); return null; } } var items=new Array(); xpath=''//div[@class="group"]/p[@class="title"]''; var xpath1=''''; var xpath2=''''; if(doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null).iterateNext()) { //browse page xpath1=''//div[@class="group"]/p[@class="title"]''; xpath2=''//p[@class="link"]/a''; } else { xpath=''//td[@class="search"]/span[@class="title"]''; if(doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null).iterateNext()) { //search page xpath1=''//td[@class="search"]/span[@class="title"]''; xpath2=''//tr/td/a''; } else { xpath=''//div[@class="toc include j"]/p/span[@class="title"]''; if(doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null).iterateNext()) { //second browse format xpath1=''//div[@class="toc include j"]/p/span[@class="title"]''; xpath2=''//div[@class="toc include j"]/p/a''; } } } if(xpath1!='''') { var rows1=doc.evaluate(xpath1, doc, nsResolver,XPathResult.ANY_TYPE, null); var row1; var rows2=doc.evaluate(xpath2, doc, nsResolver,XPathResult.ANY_TYPE, null); var row2=rows2.iterateNext(); var rows3=doc.evaluate(xpath2, doc, nsResolver,XPathResult.ANY_TYPE, null); var row3; var tPDFs=new Array(); var nextType; var link; var lastdoi; while(row1=rows1.iterateNext()) { while(row3=rows3.iterateNext()) { if(row3.textContent.toLowerCase().indexOf("pdf")>-1) {tPDFs.push(getType(row3.textContent));} } while(getdoi(row2.href)==lastdoi || !getdoi(row2.href)) {row2=rows2.iterateNext()} lastdoi=getdoi(row2.href); link=createLink(row2.href); nextType=tPDFs.shift(); if(!nextType) {nextType="none";} items[nextType+link]=row1.textContent; } } else { var t=url.split("request=")[1]; if(t) { if(t.substr(0,10)=="index-html") { //Homepage=AMS Top 20 xpath=''//div/p/a[@style="font-size: 85%;"]''; var rows=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null); var row; while(row=rows.iterateNext()) {items["0"+createLink(row.href)]=row.textContent;} } } } items = Zotero.selectItems(items); if(!items) {return true;} var urls = new Array(); for(var i in items) { PDFs.push(i[0]); urls.push(i.substr(1)); } parseRIS(urls,PDFs); }'); REPLACE INTO translators VALUES ('7e51d3fb-082e-4063-8601-cda08f6004a3', '1.0.0b4.r1', '', '2007-07-31 16:45:00', '0', '100', '4', 'Education Week', 'Ben Parr', '^https?://(?:www\.|blogs\.|www2\.)?edweek', 'function detectWeb(doc,url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var xpath=''//meta[@name="Story_type"]/@content''; var temp=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE,null).iterateNext(); if(temp) { if(temp.value=="Blog") {return "blogPost";} if(temp.value.indexOf("Story")>-1) {return "magazineArticle";} } }', 'function associateMeta(newItem, metaTags, field, zoteroField) { if(metaTags[field]) { newItem[zoteroField] = metaTags[field]; } } function scrape(doc, url) { var newItem = new Zotero.Item("magazineArticle"); if(url&&url.indexOf("blogs.edweek.org")>-1) {newItem.itemType="blogPost";} newItem.url = doc.location.href; var metaTags = new Object(); var metaTagHTML = doc.getElementsByTagName("meta"); var i; for (i = 0 ; i < metaTagHTML.length ; i++) { metaTags[metaTagHTML[i].getAttribute("name")]=Zotero.Utilities.cleanTags(metaTagHTML[i].getAttribute("content")); } associateMeta(newItem, metaTags, "Title", "title"); associateMeta(newItem, metaTags, "Cover_date", "date"); associateMeta(newItem, metaTags, "Description", "abstractNote"); associateMeta(newItem, metaTags, "ArticleID", "accessionNumber"); associateMeta(newItem,metaTags,"Source","publicationTitle"); if (metaTags["Authors"]) { var author = Zotero.Utilities.cleanString(metaTags["Authors"]); if (author.substr(0,3).toLowerCase() == "by ") { author = author.substr(3); } var authors = author.split(" and "); for each(var author in authors) { var words = author.split(" "); for (var i in words) { words[i] = words[i][0].toUpperCase() +words[i].substr(1).toLowerCase(); } author = words.join(" "); newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author")); } } newItem.complete(); } function doWeb(doc,url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var xpath=''//meta[@name="Story_type"]/@content''; var temp=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE,null).iterateNext(); if(temp) { if(temp.value.indexOf("Story")>-1 || temp.value=="Blog") {scrape(doc,url);} } }'); REPLACE INTO translators VALUES ('9220fa99-b936-430e-a8ea-43ca6cb04145', '1.0.0b4.r1', '', '2007-07-31 16:45:00', '0', '100', '4', 'AGU Journals', 'Ben Parr','^https?://(?:www.)?agu.org', 'function detectWeb(doc,url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var xpath; //abstract xpath=''//p[@id="citation"]''; if(doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE,null).iterateNext()) { return "journalArticle"; } //full text xpath=''//frameset[@rows="98, *"]''; if(doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE,null).iterateNext()) { return "journalArticle"; } //issue page xpath=''//tr/td/p[@class="title"]''; if(doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE,null).iterateNext()) { return "multiple"; } //Search Page if(doc.title.indexOf("Query Results")>-1) {return "multiple";} } ', 'function fixCaps(s) { if(s!='''') { words=Zotero.Utilities.cleanString(s).toLowerCase().split(" "); for (var j = 0 ; j < words.length ; j++) { if (j==0||(words[j][0] ==words[j][0].toLowerCase()&&words[j]!="or"&&words[j]!="and"&&words[j]!="of"&&words[j]!="in")) { words[j]= words[j][0].toUpperCase() +words[j].substr(1); } } return words.join(" "); } return ''''; } function scrape(doc,url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var newItem=new Zotero.Item("journalArticle"); var temp; var xpath; var row; var rows; newItem.url = doc.location.href; xpath=''//p[@id="title"]''; temp=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE,null).iterateNext(); if(temp) {newItem.title=temp.textContent;} xpath=''//span[@id="published"]''; temp=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE,null).iterateNext(); if(temp) { temp=Zotero.Utilities.cleanString(temp.textContent).split(" ");; newItem.date=temp[1]+" "+temp[0]+", "+temp[2]; } xpath=''//p[@class="author"]''; rows=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null); var count=0; while(row=rows.iterateNext()) {newItem.creators.push(Zotero.Utilities.cleanAuthor(row.textContent,"author")); count++;} xpath=''//tr/td/p''; temp=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null); var temp2=temp.iterateNext(); if(temp2) { for(var n=0;n<(3+2*count);n++) {temp2=temp.iterateNext();} newItem.abstractNote=Zotero.Utilities.cleanString(temp2.textContent); } xpath=''//p[@id="runhead"]''; temp=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE,null).iterateNext(); if(temp) { temp=Zotero.Utilities.cleanString(temp.textContent).split(", "); newItem.publicationTitle=fixCaps(temp[0]); for(var n=1;temp[n];n++) { if(temp[n].indexOf("VOL")>-1) {newItem.volume=temp[n].replace(''VOL. '','''');} else if(temp[n].indexOf("NO.")>-1) {newItem.issue=temp[n].replace(''NO. '','''');} else if(temp[n].indexOf("doi:")>-1) {newItem.DOI=temp[n].replace(''doi:'','''');} else if(temp[n+1]) {newItem.pages=temp[n];} } } xpath=''//p[@id="keywords"]''; temp=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE,null).iterateNext(); if(temp) { temp=Zotero.Utilities.cleanString(temp.textContent.replace(''Keywords:'','''')); newItem.tags=temp.replace(''.'','''').split(''; ''); } xpath=''//p[@id="citation"]/span[@id="journal"]''; temp=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE,null).iterateNext(); if(temp) {newItem.journalAbbreviation=temp.textContent;} newItem.complete(); } function processList(items) { items = Zotero.selectItems(items); var uris=new Array(); if (!items) {return true;} for (var i in items) {uris.push(i);} Zotero.Utilities.processDocuments(uris, scrape,function() {Zotero.done(); }); Zotero.wait(); return true; } function doWeb(doc,url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; //abstract var xpath=''//p[@id="citation"]''; if(doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE,null).iterateNext()) { scrape(doc,url); return true; } //full text xpath=''//frameset[@rows="98, *"]''; if(doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE,null).iterateNext()) { Zotero.Utilities.processDocuments(url+"0.shtml", scrape, function(){ Zotero.done(); }); Zotero.wait(); return true; } //issue page xpath=''//tr/td/p[@class="title"]''; if(doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE,null).iterateNext()) { var titlerows=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null); xpath=''//tr/td/p[@class="pubdate"]/a''; var linkrows=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null); var titlerow; var linkrow; var items=new Array(); while(titlerow=titlerows.iterateNext()) { linkrow=linkrows.iterateNext(); while(linkrow.textContent.indexOf("Abstract")<0) {linkrow=linkrows.iterateNext();} items[linkrow.href]=titlerow.textContent; } return processList(items); } //Search page if(doc.title.indexOf("Query Results")>-1) { //FASTFind Search xpath=''//tr/td/h2''; var tt=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE,null).iterateNext().textContent; if(tt.indexOf("FASTFIND")>-1) { xpath=''//tr/td[1]/font''; var citerows=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null); xpath=''//tr/td[2]/font/a''; var linkrows=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null); var citerow; var linkrow; var items=new Array(); var temp; var title; while(citerow=citerows.iterateNext()) { linkrow=linkrows.iterateNext(); items[linkrow.href]=Zotero.Utilities.cleanString(citerow.textContent); } return processList(items); } else { //Advanced Search xpath=''//tr/td[1]/font/a''; var titlerows=doc.evaluate(xpath, doc,nsResolver,XPathResult.ANY_TYPE, null); xpath=''//tr/td[2]/font/a''; var linkrows=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null); var titlerow; var linkrow; var items=new Array(); var temp; while(titlerow=titlerows.iterateNext()) { linkrow=linkrows.iterateNext(); while(linkrow.textContent.indexOf("Abstract")<0) {linkrow=linkrows.iterateNext();} items[linkrow.href]=titlerow.textContent; } return processList(items); } } } '); REPLACE INTO translators VALUES ('e4fe1596-a8c4-4d09-945f-120c4d83e580', '1.0.0b4.r1', '', '2007-07-31 16:45:00', '0', '100', '4', 'LA Times', 'Ben Parr', '^https?://(?:www.|travel.)?latimes.com', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var xpath = ''//link[@title="Main"]''; if(doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE,null).iterateNext()) {return "newspaperArticle";} if(doc.title.indexOf("Search Results")>-1) {return "multiple";} xpath = ''//h1''; var rows=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null); var row; while(row=rows.iterateNext()) { if(Zotero.Utilities.cleanString(row.textContent.toLowerCase())=="travel") {return "newspaperArticle";} } return null; }', 'function getCount(s) { if(!s||s=='''') return 0; if(s.indexOf("Displaying")>-1) { s=s.substr(19); s=s.replace(''.'',''''); s=s.split('' to ''); return s[1]-s[0]+1; } return 0; } function processList(items) { items = Zotero.selectItems(items); var uris=new Array(); if (!items) {return true;} for (var i in items) {uris.push(i);} Zotero.Utilities.processDocuments(uris, scrape,function() {Zotero.done(); }); Zotero.wait(); return true; } function findDate(s) { var words=s.split(" "); var months=new Array("january","febuary","march","april","may","june","july","august","september","october","november","december"); for(var n=0;words[n];n++) { for(var m in months) {if(words[n].toLowerCase()==months[m]) {return words[n]+" "+words[n+1]+" "+words[n+2];} } } return null; } function scrape(doc,url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var newItem = new Zotero.Item("newspaperArticle"); newItem.publicationTitle = "The Los Angeles Times"; newItem.ISSN = "0458-3035"; var xpath=''//h2/a''; var t=doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE,null).iterateNext(); if(t) {newItem.section=t.textContent; } else { xpath=''//a/img[@alt="WEST"]''; if(doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE,null).iterateNext()) {newItem.section="West";} else { xpath = ''//h1''; var rows=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null); if(t=rows.iterateNext()) {newItem.section=t.textContent;} } } xpath=''//h1[last()]''; var rows=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null); if(t=rows.iterateNext()) {newItem.title=t.textContent;} newItem.url = url; xpath=''//div[@class="storybyline"]''; var test=doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE,null).iterateNext(); if(!test) {xpath=''//p[@class="by-author"]'';} var info=doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE,null).iterateNext().textContent; info=Zotero.Utilities.cleanString(info); var date=findDate(info); if(date) { newItem.date=date; info=info.replace(date,''''); } info=Zotero.Utilities.cleanString(info); if(info.indexOf(", ")>-1) { var phrases=info.split(", "); var a=phrases[0]; if (a.substr(0,3).toLowerCase() == "by ") {a= a.substr(3);} if(a.substr(0,5).toLowerCase()!="from ") { var authors=a.split(" and "); var n; for(n in authors) {newItem.creators.push(Zotero.Utilities.cleanAuthor(authors[n],"author"));} } } else { xpath=''//div[@class="storydeckhead"]/a''; temp=doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE,null).iterateNext(); if(temp!=null && temp!='''') {newItem.creators.push(Zotero.Utilities.cleanAuthor(temp.textContent,"author"));} } newItem.attachments.push({document:doc, title:"The Los Angeles Times Snapshot"}); newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var xpath=''//link[@title="Main"]''; if(doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE,null).iterateNext()) {scrape(doc,url); return true;} xpath = ''//h1''; var rows=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null); var row; while(row=rows.iterateNext()) { if(Zotero.Utilities.cleanString(row.textContent.toLowerCase())=="travel") {scrape(doc,url); return true;} } if(doc.title.indexOf("Search Results")>-1) { xpath=''//div[@class="abstract1"]''; var count=0; rows=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null); while(row=rows.iterateNext()) { count=getCount(row.textContent); if(count!=0) {break;} } if(count==0) { xpath=''//td[@class="abstract1"]''; rows=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null); while(row=rows.iterateNext()) { count=getCount(row.textContent); if(count!=0) {break;} } } if(count>0) { var items=new Array(); xpath=''//div[@class="headline14"]/a''; rows=doc.evaluate(xpath, doc, nsResolver,XPathResult.ANY_TYPE, null); while(row=rows.iterateNext()) { if(count==0) {break;} if(row.href.indexOf("/travel/")<0) {items[row.href]=Zotero.Utilities.cleanString(row.textContent);} count--; } return processList(items); } } }'); REPLACE INTO translators VALUES ('1a3e63b2-0adf-4c8e-928b-c58c2594b45d', '1.0.0b4.r1', '', '2008-07-15 19:45:00', '1', '100', '4', 'BioMed Central and More', 'Ben Parr', 'http://[^/]*(jcmr-online|respiratory-research|bio-diglib|nuclear-receptor|medimmunol|kinetoplastids|filariajournal|cellandchromosome|actavetscand|aidsrestherapy|almob|ann-clinmicrob|annals-general-psychiatry|asir-journal|arthritis-research|apfmj|anzhealthpolicy|behavioralandbrainfunctions|biodatamining|biology-direct|biomagres|biomedical-engineering-online|bpsmedicine|biotechnologyforbiofuels|biomedcentral|breast-cancer-research|cancerci|cbmjournal|cardiab|cardiovascularultrasound|casesjournal|lipidsignaling.cbdjournals|biosignaling|celldiv|cerebrospinalfluidresearch|journal.chemistrycentral|capmh|cmjournal|chiroandosteo|clinicalmolecularallergy|cpementalhealth|comparative-hepatology|conflictandhealth|resource-allocation|coughjournal|ccforum|cytojournal|diagnosticpathology|dynamic-med|ete-online|ehjournal|epi-perspectives|epigeneticsandchromatin|fibrogenesis|frontiersinzoology|gvt-journal|genomebiology|genomemedicine|geochemicaltransactions|globalizationandhealth|gutpathogens|harmreductionjournal|head-face-med|hqlo|health-policy-systems|human-resources-health|immunityageing|immunome-research|implementationscience|infectagentscancer|intarchmed|internationalbreastfeedingjournal|equityhealthj|ijbnpa|ij-healthgeographics|ijmhs|issoonline|jautoimdis|jbioleng|jbiol|j-biomed-discovery|jbppni|carcinogenesis|cardiothoracicsurgery|jcmr-online|jcircadianrhythms|ethnobiomed|jexpclinassistreprod|jeccr|jfootankleres|jhoonline|jibtherapies|journal-inflammation|jmedicalcasereports|jmolecularsignaling|jnanobiotechnology|jnrbm|jneuroengrehab|jneuroinflammation|occup-med|josr-online|jissn|translational-medicine|traumamanagement|lipidworld|malariajournal|microbialcellfactories|molecularbrain|molecular-cancer|molecularcytogenetics|molecularneurodegeneration|molecularpain|neuraldevelopment|nonlinearbiomedphys|nutritionandmetabolism|nutritionj|ojrd|om-pc|parasitesandvectors|particleandfibretoxicology|pathogeneticsjournal|pssjournal|ped-rheum|peh-med|plantmethods|pophealthmetrics|proteomesci|ro-journal|rbej|reproductive-health-journal|respiratory-research|retrovirology|salinesystems|the-scientist|scoliosisjournal|scfbm|substanceabusepolicy|tbiomed|thrombosisjournal|thyroidresearchjournal|tobaccoinduceddiseases|trialsjournal|urooncologyjournal|virologyj|wjes|wjso)\.(com|org|net)', 'function detectWeb(doc,url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == "x" ) return namespace; else return null; } : null; var xpath=''//meta[@name="citation_fulltext_html_url"]''; //Single if (doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {return "journalArticle";} //Multiple xpath=''//a[@class="hiddenlink"][span[@class="xcitationtitle"][b]]''; xpath+='' | //span[@class="xcitationtitle2"]/a[@class="hiddenlink"]''; xpath+='' | //div[@class="bodytext"]/a[@class="hiddenlink"][font/b]''; xpath+='' | //p[@class="bodytext"]/a[@class="hiddenblack"][b]''; xpath+='' | //div[@class="bodytext"]/a[@class="hiddenblack"][b]''; xpath+='' | //div[@class="bodytext"]/a[@class="hiddenlink"][font/b]''; var rows=doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var row; var link; while(row=rows.iterateNext()) { link=row.href; if(link.indexOf("pubmed")<0 && link.substr(link.length-4)!=".pdf" && link.indexOf("blogs.")<0) {return "multiple";} } }', 'function parseRIS(getURL) { Zotero.Utilities.HTTP.doGet(getURL, function(text){ // load translator for RIS var translator = Zotero.loadTranslator ("import"); translator.setHandler("itemDone", function(obj, newItem) { var doi = newItem.DOI; var splitURL = newItem.url.split(''/''); if(splitURL.length>=3 && doi){ var doiSuffix = doi.slice(doi.indexOf(''/'')+1); var pdfURL = splitURL[0] + ''/'' + splitURL[1] + ''/'' + splitURL[2]; pdfURL += ''/content/pdf/'' + doiSuffix + ''.pdf''; var source = splitURL[2].replace(/^www./i,'''').replace(/\.[\w]+$/i,''''); newItem.attachments = [ //{url:newItem.url+''/abstract'', title:source + " Abstract Snapshot", mimeType:"text/html"}, {url:newItem.url, title:source + " Snapshot", mimeType:"text/html"}, {url:pdfURL, title:source + " PDF", mimeType:"application/pdf"} ]; } newItem.complete(); }); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.translate(); Zotero.done(); }, function() {}); Zotero.wait(); } function doWeb(doc,url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == "x" ) return namespace; else return null; } : null; var xpath=''//meta[@name="citation_fulltext_html_url"]/@content''; var rows; var row=doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if (row) { //Single Article var url=row.textContent+"/citation/"; Zotero.Utilities.HTTP.doPost(url, ''include=cit&format=refman&direct=on&submit=Download+references&action=submit'', function(text) {parseRIS(url+''?include=cit&format=refman&direct=on&submit=Download+references&action=submit'');}); Zotero.wait(); return true; } //Multiple xpath=''//a[@class="hiddenlink"][span[@class="xcitationtitle"][b]]''; xpath+='' | //span[@class="xcitationtitle2"]/a[@class="hiddenlink"]''; xpath+='' | //div[@class="bodytext"]/a[@class="hiddenlink"][font/b]''; xpath+='' | //p[@class="bodytext"]/a[@class="hiddenblack"][b]''; xpath+='' | //div[@class="bodytext"]/a[@class="hiddenblack"][b]''; xpath+='' | //div[@class="bodytext"]/a[@class="hiddenlink"][font/b]''; rows=doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var items=new Array(); var link; var t; while(row=rows.iterateNext()) { link=row.href; if(link.indexOf("pubmed")<0 && link.substr(link.length-4)!=".pdf" && link.indexOf("blogs.")<0) { t=link.split(''/''); if(t[t.length-1].indexOf("comments#")>-1) {link=t.slice(0,t.length-1).join(''/'');} items[link.replace("/abstract","")+"/citation"]=row.textContent; } } items = Zotero.selectItems(items); var uris=new Array(); if (!items) {return true;} for (var i in items) {uris.push(i);} Zotero.Utilities.HTTP.doPost(uris, "include=cit&format=refman&direct=on&submit=Download+references&action=submit", function(text) { for (var j = 0 ; j < uris.length ; j++) {parseRIS(uris[j] + "?include=cit&format=refman&direct=on&submit=Download+references&action=submit");} }); Zotero.wait(); } '); REPLACE INTO translators VALUES ('8a07dd43-2bce-47bf-b4bf-c0fc441b79a9', '1.0.0b4.r5', '', '2008-07-15 19:40:00', '0', '100', '4', 'Optics Express', 'Michael Berkowitz', 'http://(www.)?opticsexpress\.org', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var searchpath = ''//div[@id="col2"]/p/strong/a''; if (doc.evaluate(searchpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else if (url.indexOf("abstract.cfm") != -1) { return "journalArticle"; } }', 'function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var xpath = ''//div[@id="col2"]/p/strong/a''; var art = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var next_art; while (next_art = art.iterateNext()) { items[next_art.href] = Zotero.Utilities.trimInternal(next_art.textContent); } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } for (var a in articles) { var link = articles[a]; Zotero.Utilities.HTTP.doGet(link, function(text) { if (text.match(/doi:.*\"/)) var doi = text.match(/doi:(.*)\"/)[1]; var id = text.match(/name=\"articles\"\s+value=\"([^"]+)\"/)[1]; var action = text.match(/select\s+name=\"([^"]+)\"/)[1]; var get = ''http://www.opticsinfobase.org/custom_tags/IB_Download_Citations.cfm''; var post = ''articles='' + id + ''&ArticleAction=save_endnote2&'' + action + ''=save_endnote2''; Zotero.Utilities.HTTP.doPost(get, post, function(text) { var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { var pubName; if (item.journalAbbreviation) { pubName = item.journalAbbreviation; } else { pubName = item.publicationTitle; } if (doi) item.DOI = doi; item.attachments = [{url:articles[a], title:pubName + " Snapshot", mimeType:"text/html"}]; item.complete(); }); translator.translate(); }); }); } }'); REPLACE INTO translators VALUES ('a1a97ad4-493a-45f2-bd46-016069de4162', '1.0.0b4.r1', '', '2009-01-06 21:05:00', 1, 100, 4, 'Optical Society of America', 'Michael Berkowitz and Eli Osherovich', 'https?://[^.]+\.(opticsinfobase|osa)\.org', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var searchpath = ''//div[@id="col2"]/p/strong/a''; if (doc.evaluate(searchpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else if (url.indexOf("abstract.cfm") != -1) { return "journalArticle"; } }', 'function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var host = doc.location.host; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var xpath = ''//div[@id="col2"]/p/strong/a''; var arts = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var next_art; while (next_art = arts.iterateNext()) { items[next_art.href] = Zotero.Utilities.trimInternal(next_art.textContent); } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, function(newDoc) { var osalink = newDoc.evaluate(''//div[@id="abstract-header"]/p/a[contains(text(), "opticsinfobase")]'', newDoc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().href; var pdfpath = ''//div[@id="abstract-header"]/p/a[contains(text(), "Full Text")]''; var pdflink = newDoc.evaluate(pdfpath, newDoc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); var abstractblock = newDoc.evaluate(''//meta[@name="dc.description"]'', newDoc, nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; var identifierblock = newDoc.evaluate(''//meta[@name="dc.identifier"]'', newDoc, nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; Zotero.Utilities.HTTP.doGet(osalink, function(text) { var action = text.match(/select\s+name=\"([^"]+)\"/)[1]; var id = text.match(/input\s+type=\"hidden\"\s+name=\"articles\"\s+value=\"([^"]+)\"/)[1]; var get = ''http://'' + host + ''/custom_tags/IB_Download_Citations.cfm''; var post = ''articles='' + id + ''&ArticleAction=save_endnote2&'' + action + ''=save_endnote2''; Zotero.Utilities.HTTP.doPost(get, post, function(text) { var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { var pubName; if (item.journalAbbreviation) { pubName = item.journalAbbreviation; } else { pubName = item.publicationTitle; } if (identifierblock) { if (/doi:(.*)$/.test(identifierblock.getAttribute(''content''))) { item.DOI = RegExp.$1; } } item.attachments = [{url:osalink, title:pubName + " Snapshot", mimeType:"text/html"}]; if (pdflink) { item.attachments.push({url:pdflink.href, title:"OSA Journals PDF", mimeType:"application/pdf"}); } if (abstractblock) { item.abstractNote = abstractblock.getAttribute(''content''); } item.complete(); }); translator.translate(); }); }); }, function() {Zotero.done;}); }'); REPLACE INTO translators VALUES ('b61c224b-34b6-4bfd-8a76-a476e7092d43', '1.0.0b4.r5', '', '2009-01-28 18:10:00', 1, 100, 4, 'SSRN', 'Michael Berkowitz', 'http://papers\.ssrn\.com/', 'function detectWeb(doc, url) { var namespace=doc.documentElement.namespaceURI; var nsResolver=namespace?function(prefix) { return (prefix=="x")?namespace:null; }:null; if (doc.evaluate(''//font/strong/a[substring(@class, 1, 4) = "text"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else if (url.indexOf("abstract_id") != -1) { return "journalArticle"; } }', 'function doWeb(doc, url) { var namespace=doc.documentElement.namespaceURI; var nsResolver=namespace?function(prefix) { return (prefix=="x")?namespace:null; }:null; var uris = new Array(); if (doc.evaluate(''//font/strong/a[substring(@class, 1, 4) = "text"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var items = new Object(); var xpath = ''//font/strong/a[substring(@class, 1, 4) = "text"]''; var titles = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var next_title = titles.iterateNext(); while (next_title) { items[next_title.href] = next_title.textContent; next_title = titles.iterateNext(); } items = Zotero.selectItems(items); for (var i in items) { uris.push(i); } } else { uris.push(url); } Zotero.Utilities.processDocuments(uris, function(doc) { if (doc.evaluate(''//span[@id="knownuser"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var id = doc.location.href.match(/abstract_id=(\d+)/)[1]; if (doc.evaluate(''//a[@title="Download from Social Science Research Network"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var pdfurl = doc.evaluate(''//a[@title="Download from Social Science Research Network"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().href; } var newURL = ''http://papers.ssrn.com/sol3/RefExport.cfm?abstract_id='' + id + ''&format=3''; Zotero.Utilities.HTTP.doGet(newURL, function(text) { var ris=text.match(/<input type=\"Hidden\"\s+name=\"hdnContent\"\s+value=\"([^"]*)\">/)[1]; var trans=Zotero.loadTranslator("import"); trans.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); trans.setString(ris); trans.setHandler("itemDone", function(obj, item) { item.itemType = "journalArticle"; var tags = new Array(); for each (var tag in item.tags) { var newtags = tag.split(","); for each (var newtag in newtags) tags.push(newtag); } item.tags = tags; item.attachments = [{url:item.url, title:"SSRN Snapshot", mimeType:"text/html"}]; if (pdfurl) item.attachments.push({url:pdfurl, title:"SSRN Full Text PDF", mimeType:"application/pdf"}); item.complete(); }); trans.translate(); }); } else { var item = new Zotero.Item("journalArticle"); item.title = Zotero.Utilities.capitalizeTitle(Zotero.Utilities.trimInternal(doc.evaluate(''//div[@id="abstractTitle"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent)); var authors = doc.evaluate(''//center/font/a[@class="textlink"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var author; while (author = authors.iterateNext()) { var aut = Zotero.Utilities.capitalizeTitle(Zotero.Utilities.trimInternal(author.textContent)); item.creators.push(Zotero.Utilities.cleanAuthor(aut, "author")); } item.abstractNote = Zotero.Utilities.trimInternal(doc.evaluate(''//div[@id="innerWhite"]/font[1]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent).substr(10); var tags = doc.evaluate(''//font[contains(./b/text(), "Key")]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if (tags) { item.tags = Zotero.Utilities.trimInternal(tags.textContent).substr(10).split(/,\s+/); } item.publicationTitle = "SSRN eLibrary"; var date = doc.evaluate(''id("innerWhite")/center/font[2]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if (date && date.textContent.match(/\d{4}/)) { item.date = Zotero.Utilities.trimInternal(date.textContent); } item.url = doc.location.href; /* Commenting out PDF downloading until we add referer capability var pdfurl = doc.evaluate(''//a[contains(@href,"pdf")]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if (pdfurl) { pdfurl = pdfurl.href; } */ item.attachments = [{url:item.url, title:"SSRN Snapshot", mimeType:"text/html"}]; if (pdfurl) { item.attachments.push({url:pdfurl, title:"SSRN Full Text PDF", mimeType:"application/pdf"}); } item.complete(); } }, function() {Zotero.done();}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('1c34744d-690f-4cac-b31b-b7f0c90ac14d', '1.0.0b3.r1', '', '2007-12-21 16:00:00', '0', '100', '4', 'RSC Publishing', 'Ramesh Srigiriraju', 'http://(:?www\.|google\.)?rsc\.org/', 'function detectWeb(doc, url) { var namespace=doc.documentElement.namespaceURI; var nsResolver=namespace?function(prefix) { return (prefix=="x")?namespace:null; }:null; var journalreg=new RegExp("http://(:?www\.)?rsc\.org/(:?P|p)ublishing/(:?J|j)ournals"); if(journalreg.test(url)) { var browspath=''//div/p/a[text()="Use advanced search"]''; if(doc.evaluate(browspath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) return "multiple"; var searchpath=''//a[text()="Back to Search Form"]''; if(doc.evaluate(searchpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) return "multiple"; var singpath=''//ul/li/a[text()="HTML Article" or text()="PDF"]''; if(doc.evaluate(singpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) return "journalArticle"; } var magpath=''//div/h3[text()="Link to journal article"]''; if(doc.evaluate(magpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) return "magazineArticle"; var magbrows=''//div/h4[@class="newstitle"]/a''; if(doc.evaluate(magbrows, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) return "multiple"; var magsearch=''//p[@class="more"]/strong/a[text()="Search RSC journals"]''; if(doc.evaluate(magsearch, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) return "multiple"; var bookreg=new RegExp("http://(:?www\.)?rsc\.org/(:?P|p)ublishing/e(:?B|b)ooks"); if(bookreg.test(url)) { var pagepath=''//title/text()''; var page=doc.evaluate(pagepath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().nodeValue; if((page=="Books in a publication year")||(page=="Subject Area Books")||(page=="A - Z Index") ||(page=="Book Series")) return "multiple"; var chappath=''//dt/img[@alt="Chapter"]''; var singpath=''//h3[text()="Table of Contents"]''; if(doc.evaluate(chappath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) return "bookSection"; else if(doc.evaluate(singpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) return "book"; } var searchpath=''//div/p[@class="title"][text()="Search Results"]''; if(doc.evaluate(searchpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) return "multiple"; }', 'function doChap(newItem, chaptext) { var chapdata=chaptext.split("<br>"); for(var pos=chapdata.length-2; pos>=0; pos--) { chapdata[pos]=Zotero.Utilities.cleanTags(chapdata[pos]); if(chapdata[pos].indexOf("Editors")!=-1) { var editors=chapdata[pos].split(","); for(var i=0; i<=editors.length-1; i++) { editors[i]=Zotero.Utilities.cleanString(editors[i]); var names=editors[i].split(" "); var creators=new Array(); if(i==0) creators.firstName=names[1]; else creators.firstName=names[0]; creators.lastName=names[names.length-1]; creators.creatorType="editor"; newItem.creators.push(creators); } } if(chapdata[pos].indexOf("Authors")!=-1) { var authors=chapdata[pos].split(","); for(var i=0; i<=authors.length-1; i++) { authors[i]=Zotero.Utilities.cleanString(authors[i]); var names=authors[i].split(" "); var creators=new Array(); if(i==0) creators.firstName=names[1]; else creators.firstName=names[0]; creators.lastName=names[names.length-1]; creators.creatorType="editor"; newItem.creators.push(creators); } } if(chapdata[pos].indexOf("DOI")!=-1) newItem.itemID=chapdata[pos].substring(chapdata[pos].indexOf("1")); if(chapdata[pos].indexOf("Book")!=-1) newItem.bookTitle=chapdata[pos].substring(chapdata[pos].indexOf(" ")+1); } } function doBook(newItem, bookdata) { var fields=bookdata.split("<br>"); for(var pos=fields.length-2; pos>=0; pos--) { fields[pos]=Zotero.Utilities.cleanTags(fields[pos]); if(fields[pos].indexOf("Volume")!=-1) { var i=fields[pos].lastIndexOf(";"); var vol; if(i!=-1) vol=fields[pos].substring(i+1); else vol=fields[pos].substring(fields[pos].lastIndexOf(" ")); newItem.volume=Zotero.Utilities.cleanString(vol); } if(fields[pos].indexOf("Edition")!=-1) { var i=fields[pos].lastIndexOf(";"); if(i!=-1) ed=fields[pos].substring(i+1); else ed=fields[pos].substring(fields[pos].lastIndexOf(" ")); newItem.edition=Zotero.Utilities.cleanString(ed); } if(fields[pos].indexOf("Copyright")!=-1) { var i=fields[pos].lastIndexOf(";"); var date; if(i!=-1) date=fields[pos].substring(i+1); else date=fields[pos].substring(fields[pos].indexOf(":")+2); newItem.date=Zotero.Utilities.cleanString(date); } if(fields[pos].indexOf("ISBN")!=-1&&fields[pos].indexOf("print")!=-1) { var i=fields[pos].lastIndexOf(";"); var isbn; if(i!=-1) isbn=fields[pos].substring(i+1); else isbn=fields[pos].substring(fields[pos].indexOf(":")+2); newItem.ISBN=Zotero.Utilities.cleanString(isbn); } if(fields[pos].indexOf("Author")!=-1||fields[pos].indexOf("Editor")!=-1) { var authors=fields[pos].split(","); for(var i=0; i<=authors.length-1; i++) { authors[i]=Zotero.Utilities.cleanString(authors[i]); var names=authors[i].split(" "); var creators=new Array(); creators.firstName=names[0]; creators.lastName=names[names.length-2]; if(names[names.length-1]=="(Editor)") creators.creatorType="editor"; if(names[names.length-1]=="(Author)") creators.creatorType="author"; newItem.creators.push(creators); } } if(fields[pos].indexOf("DOI:")!=-1) newItem.itemID=fields[pos].substring(fields[pos].indexOf("1")); } } function doWeb(doc, url) { var namespace=doc.documentElement.namespaceURI; var nsResolver=namespace?function(prefix) { return (prefix=="x")?namespace:null; }:null; var journalreg=new RegExp("http://(:?www\.)?rsc\.org/(:?P|p)ublishing/(:?J|j)ournals"); if(journalreg.test(url)) { var browspath=''//div/p/a[text()="Use advanced search"]''; if(doc.evaluate(browspath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var doipath=''//p[strong/text()="DOI:"]/a/text()''; var dois=doc.evaluate(doipath, doc, nsResolver, XPathResult.ANY_TYPE, null); var titlpath=''//p/strong/a''; var titles=doc.evaluate(titlpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var items=new Array(); var doi; while(doi=dois.iterateNext()) items[doi.nodeValue]=Zotero.Utilities.cleanString(titles.iterateNext().textContent); items=Zotero.selectItems(items); var string="http://www.rsc.org/delivery/_ArticleLinking/refdownload.asp?"; for(var codes in items) { var string="http://www.rsc.org/delivery/_ArticleLinking/refdownload.asp?ManuscriptID="; string+=codes.substring(codes.indexOf("/")+1)+"&type=refman"; Zotero.Utilities.HTTP.doGet(string, function(text) { var trans=Zotero.loadTranslator("import"); trans.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); // fix bad Y1 tags, which have wrong spacing and typically terminate with "///" text = text.replace("Y1 - ", "Y1 - "); trans.setString(text); trans.translate(); Zotero.done(); }); } } var searchpath=''//a[text()="Back to Search Form"]''; if(doc.evaluate(searchpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var doipath=''//p[strong/text()="DOI:"]/a/text()''; var dois=doc.evaluate(doipath, doc, nsResolver, XPathResult.ANY_TYPE, null); var titlpath=''//form/div/h5''; var titles=doc.evaluate(titlpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var title; var items=new Array(); while(title=titles.iterateNext()) items[dois.iterateNext().nodeValue]=title.textContent; items=Zotero.selectItems(items); var string="http://www.rsc.org/delivery/_ArticleLinking/refdownload.asp?"; for(var codes in items) { var string="http://www.rsc.org/delivery/_ArticleLinking/refdownload.asp?ManuscriptID="; string+=codes.substring(codes.indexOf("/")+1)+"&type=refman"; Zotero.Utilities.HTTP.doGet(string, function(text) { var trans=Zotero.loadTranslator("import"); trans.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); // fix bad Y1 tags, which have wrong spacing and typically terminate with "///" text = text.replace("Y1 - ", "Y1 - "); trans.setString(text); trans.translate(); Zotero.done(); }); } } var singpath=''//ul/li/a[text()="HTML Article" or text()="PDF"]''; if(doc.evaluate(singpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var doipath=''//div/p[strong/text()="DOI:"]''; var text=doc.evaluate(doipath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; var doi=text.substring(text.indexOf("/")+1); var string="http://www.rsc.org/delivery/_ArticleLinking/refdownload.asp?ManuscriptID="+doi; string+="&type=refman"; Zotero.Utilities.HTTP.doGet(string, function(text) { var trans=Zotero.loadTranslator("import"); trans.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); // fix bad Y1 tags, which have wrong spacing and typically terminate with "///" text = text.replace("Y1 - ", "Y1 - "); trans.setString(text); trans.setHandler("itemDone", function(obj, newItem) { var url2=newItem.url; var stringy; var archpath=''//div[h3/text()="Journals archive purchaser access"]''; if(doc.evaluate(archpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var stringy="http://www.rsc.org/ejarchive/"; stringy+=url2.substring(url2.lastIndexOf("/")+1)+".pdf"; newItem.attachments.push({url:stringy, title:"RSC PDF", mimeType:"application/pdf"}); } else { var stringy="http://www.rsc.org/delivery/_ArticleLinking/DisplayArticleForFree.cfm?doi="; stringy+=url2.substring(url2.lastIndexOf("/")+1); newItem.attachments.push({url:stringy, title:"RSC PDF", mimeType:"application/pdf"}); } newItem.complete(); }); trans.translate(); Zotero.done(); }); } } var magpath=''//div/h3[text()="Link to journal article"]''; if(doc.evaluate(magpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var newItem=new Zotero.Item("magazineArticle"); var titlpath=''//div/h2/div[@class="header"]/text()''; newItem.title=doc.evaluate(titlpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().nodeValue; var authpath=''//em/text()''; var auth=doc.evaluate(authpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().nodeValue; var authors=auth.split(","); if(newItem.title.indexOf("Interview")==-1) for(var i=0; i<=authors.length-1; i++) { authors[i]=Zotero.Utilities.cleanString(authors[i]); var names=authors[i].split(" "); var creator=new Array(); creator.firstName=names[0]; creator.lastName=names[names.length-1]; newItem.creators.push(creator); } var textpath=''//div[@id="content"]//text()''; var text=doc.evaluate(textpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var temp; while(temp=text.iterateNext()) if(temp.nodeValue==newItem.title) { newItem.date=text.iterateNext().nodeValue; break; } var datapath= ''//div[@id="breadcrumbs"]/ul/li/a/text()''; var data=doc.evaluate(datapath, doc, nsResolver, XPathResult.ANY_TYPE, null); var prev; while(temp=data.iterateNext()) { if(temp.nodeValue.indexOf("Chemi")!=-1) newItem.publication=temp.nodeValue; prev=temp; } newItem.issue=prev.nodeValue; newItem.complete(); } var magbrows=''//div/h4[@class="newstitle"]/a''; if(doc.evaluate(magbrows, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var titlpath=''//h4[@class="newstitle"]/a''; var titles=doc.evaluate(titlpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var title; var items=new Array(); while(title=titles.iterateNext()) items[title.href]=title.textContent; items=Zotero.selectItems(items); for(var linx in items) { var newItem=new Zotero.Item("magazineArticle"); newItem.url=linx; newItem.title=items[linx]; var datepath=''//div[h4/a/text()="''+items[linx]+''"]/h4[@class="datetext"]/text()''; newItem.date=doc.evaluate(datepath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().nodeValue; var datapath= ''//div[@id="breadcrumbs"]/ul/li/a/text()''; var data=doc.evaluate(datapath, doc, nsResolver, XPathResult.ANY_TYPE, null); var prev; var temp; while(temp=data.iterateNext()) { if(temp.nodeValue.indexOf("Chemi")!=-1) newItem.publication=temp.nodeValue; prev=temp; } if(prev.nodeValue!=newItem.publication) newItem.issue=prev.nodeValue; newItem.complete(); } } var magsearch=''//p[@class="more"]/strong/a[text()="Search RSC journals"]''; if(doc.evaluate(magsearch, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var titlpath=''//div/p/a''; var titles=doc.evaluate(titlpath, doc, nsResolver, XPathResult.ANY_TYPE, null); titlpath=''//blockquote/p/a[span/@class="l"]''; var titles2=doc.evaluate(titlpath, doc, nsResolver, XPathResult.ANY_TYPE, null) var title; var items=new Array(); while(title=titles.iterateNext()) items[title.href]=title.textContent; while(title=titles2.iterateNext()) items[title.href]=title.textContent; items=Zotero.selectItems(items); for(var linx in items) { var newItem=new Zotero.Item("magazineArticle"); newItem.url=linx; newItem.title=items[linx]; newItem.complete(); } } var bookreg=new RegExp("http://(:?www\.)?rsc\.org/(:?P|p)ublishing/e(:?B|b)ooks"); if(bookreg.test(url)) { var browspath=''//title/text()''; var page=doc.evaluate(browspath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().nodeValue; if((page=="Books in a publication year")||(page=="Subject Area Books")||(page=="A - Z Index") ||(page=="Book Series")) { var doipath=''//dd/p/a/text()''; var dois=doc.evaluate(doipath, doc, nsResolver, XPathResult.ANY_TYPE, null); var items=new Array(); var title; while(title=dois.iterateNext()) { var doi=dois.iterateNext().nodeValue; items[doi.substring(doi.indexOf("1"))]=title.nodeValue; } items=Zotero.selectItems(items); for(var codes in items) { var newItem=new Zotero.Item("book"); newItem.itemID=codes; newItem.title=items[codes]; var itempath=''//dd/p[contains(a[2]/text(), "''+codes+''")]''; var itempath2=''//dd/p[contains(a/text(), "''+codes+''")]''; var data; if(data=doc.evaluate(itempath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) data=data.innerHTML; else if(data=doc.evaluate(itempath2, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) data=data.innerHTML; doBook(newItem, data); newItem.complete(); } } var chappath=''//dt/img[@alt="Chapter"]''; var singpath=''//h3[text()="Table of Contents"]''; if(doc.evaluate(chappath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var newItem=new Zotero.Item("bookSection"); var titlpath=''//span/h3/text()''; var titles=doc.evaluate(titlpath, doc, nsResolver, XPathResult.ANY_TYPE, null); newItem.title=titles.iterateNext().nodeValue; newItem.bookTitle=titles.iterateNext().nodeValue; var datapath=''//dd/p''; var entries=doc.evaluate(datapath, doc, nsResolver, XPathResult.ANY_TYPE, null); var chaptext=entries.iterateNext().innerHTML; doChap(newItem, chaptext); var bookdata=entries.iterateNext().innerHTML; doBook(newItem, bookdata); var linkpath=''//td[1][@class="td1"]/a[1]''; var linx=doc.evaluate(linkpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var pdflink; while(pdflink=linx.iterateNext()) newItem.attachments.push({url:pdflink.href, title:"RCS PDF", mimeType:"application/pdf"}); newItem.complete(); } else if(doc.evaluate(singpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var newItem=new Zotero.Item("book"); var itempath=''//dd/p''; var data=doc.evaluate(itempath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().innerHTML; doBook(newItem, data); var titlpath=''//div/h2/text()''; newItem.title=doc.evaluate(titlpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().nodeValue; var linkpath=''//td[1][@class="td1"]/a[1]''; var linx=doc.evaluate(linkpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var pdflink; while(pdflink=linx.iterateNext()) newItem.attachments.push({url:pdflink.href, title:"RCS PDF", mimeType:"application/pdf"}); newItem.complete(); } } var searchpath=''//div/p[@class="title"][text()="Search Results"]''; if(doc.evaluate(searchpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var doipath=''//dd/p/a/text()''; var dois=doc.evaluate(doipath, doc, nsResolver, XPathResult.ANY_TYPE, null); var title; var items=new Array(); while(title=dois.iterateNext()) { var doi=dois.iterateNext().nodeValue; items[doi.substring(doi.indexOf("1"))]=title.nodeValue; } items=Zotero.selectItems(items); for(var codes in items) { var itempath=''//dd/p[contains(a/text(), "''+codes+''")]''; var newpath=''//dd[contains(p[2]/a/text(), "''+codes+''")]/p[1]/strong/text()''; var data=doc.evaluate(itempath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().innerHTML; if(data.indexOf("Book:")!=-1) { var newItem=new Zotero.Item("bookSection"); newItem.itemID=codes; newItem.title=items[codes]; doChap(newItem, data); newItem.complete(); } else { var newItem=new Zotero.Item("book"); var newdata=doc.evaluate(newpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().nodeValue; if(newdata.indexOf("Volume")!=-1) newItem.volume=newdata.substring(newdata.lastIndexOf(" ")+1); else newItem.series=newdata; newItem.itemID=codes; newItem.title=items[codes]; doBook(newItem, data); newItem.complete(); } } } Zotero.wait(); }'); REPLACE INTO translators VALUES ('4fd6b89b-2316-2dc4-fd87-61a97dd941e8', '1.0.0b3.r1', '', '2008-10-28 02:50:00', 1, 200, 4, 'Library Catalog (InnoPAC)', 'Simon Kornblith and Michael Berkowitz', '(search~|\/search\?|(a|X|t|Y|w)\?|\?(searchtype|searchscope)|frameset&FF)', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; // Central Michigan University fix var xpath = ''//div[@class="bibRecordLink"]''; var elmt = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if(elmt) { return "book"; } // possibly disastrous edit to regular expression below if (!url.match(/SEARCH=/) && !url.match(/searchargs?=/) && !url.match(/&FF/)) return false; // First, check to see if the URL alone reveals InnoPAC, since some sites don''t reveal the MARC button var matchRegexp = new RegExp(''^https?://[^/]+/search[^/]*\\??/[^/]+/[^/]+/[^/]+\%2C[^/]+/frameset(.+)$''); if(matchRegexp.test(doc.location.href)) { if (!url.match("SEARCH") && !url.match("searchtype")) { return "book"; } } // Next, look for the MARC button xpath = ''//a[img[@src="/screens/marcdisp.gif" or starts-with(@alt, "MARC ") or @src="/screens/regdisp.gif" or @alt="REGULAR RECORD DISPLAY"]]''; elmt = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if(elmt) { return "book"; } // Also, check for links to an item display page var tags = doc.getElementsByTagName("a"); for(var i=0; i<tags.length; i++) { if(matchRegexp.test(tags[i].href) || tags[i].href.match(/^https?:\/\/([^/]+\/(?:search\??\/|record=?|search%7e\/)|frameset&FF=)/)) { return "multiple"; } } return false; }', 'function scrape(marc, newDoc) { var namespace = newDoc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var xpath = ''//pre/text()''; if (newDoc.evaluate(xpath, newDoc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var elmts = newDoc.evaluate(xpath, newDoc, null, XPathResult.ANY_TYPE, null); var useNodeValue = true; } else { var elmts = newDoc.evaluate(''//pre'', newDoc, nsResolver, XPathResult.ANY_TYPE, null); var useNodeValue = false; } var elmt; while(elmt = elmts.iterateNext()) { if (useNodeValue) { var text = elmt.nodeValue; } else { var text = elmt.textContent; } var newItem = new Zotero.Item(); var record = new marc.record(); var linee = text.split("\n"); for (var i=0; i<linee.length; i++) { if(!linee[i]) { continue; } linee[i] = linee[i].replace(/[\xA0_\t]/g, " "); var value = linee[i].substr(7); if(linee[i].substr(0, 6) == " ") { // add this onto previous value tagValue += value; } else { if(linee[i].substr(0, 6) == "LEADER") { // trap leader record.leader = value; } else { if(tagValue) { // finish last tag tagValue = tagValue.replace(/\|(.)/g, marc.subfieldDelimiter+"$1"); if(tagValue[0] != marc.subfieldDelimiter) { tagValue = marc.subfieldDelimiter+"a"+tagValue; } // add previous tag record.addField(tag, ind, tagValue); } var tag = linee[i].substr(0, 3); var ind = linee[i].substr(4, 2); var tagValue = value; } } } if(tagValue) { tagValue = tagValue.replace(/\|(.)/g, marc.subfieldDelimiter+"$1"); if(tagValue[0] != marc.subfieldDelimiter) { tagValue = marc.subfieldDelimiter+"a"+tagValue; } // add previous tag record.addField(tag, ind, tagValue); } record.translate(newItem); var domain = newDoc.location.href.match(/https?:\/\/([^/]+)/); newItem.repository = domain[1]+" Library Catalog"; newItem.complete(); } } function pageByPage(marc, urls) { Zotero.Utilities.processDocuments(urls, function(newDoc) { scrape(marc, newDoc); }, function() { Zotero.done() }); } function doWeb(doc, url) { var uri = doc.location.href; var newUri; // load translator for MARC var translator = Zotero.loadTranslator("import"); translator.setTranslator("a6ee60df-1ddc-4aae-bb25-45e0537be973"); var marc = translator.getTranslatorObject(); var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; if (detectWeb(doc, url) == "book") { var matchRegexp = new RegExp(''^(.*)frameset(.+)$''); var m = matchRegexp.exec(uri); if (m) { newUri = uri.replace(/frameset/, "marc"); } else { newUri = doc.evaluate(''//a[contains(@href, "frameset")]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().href.replace(/frameset/, ''marc''); } pageByPage(marc, [newUri]); } else { // Search results page // Require link to match this var tagRegexp = new RegExp(); tagRegexp.compile(''^https?://[^/]+/search\\??/[^/]+/[^/]+/[0-9]+\%2C[^/]+/frameset''); var urls = new Array(); var availableItems = new Array(); var firstURL = false; var tableRows = doc.evaluate(''//table[@class="browseScreen"]//tr[@class="browseEntry" or @class="briefCitRow" or td/input[@type="checkbox"] or td[contains(@class,"briefCitRow")]]'', doc, nsResolver, XPathResult.ANY_TYPE, null); // Go through table rows var i = 0; while(tableRow = tableRows.iterateNext()) { // get link var links = doc.evaluate(''.//span[@class="briefcitTitle"]/a'', tableRow, nsResolver, XPathResult.ANY_TYPE, null); var link = links.iterateNext(); if(!link) { var links = doc.evaluate(".//a", tableRow, nsResolver, XPathResult.ANY_TYPE, null); link = links.iterateNext(); } if(link) { if(availableItems[link.href]) { continue; } // Go through links while(link) { if (link.textContent.match(/\w+/)) availableItems[link.href] = link.textContent; link = links.iterateNext(); } i++; } }; var items = Zotero.selectItems(availableItems); if(!items) { return true; } var newUrls = new Array(); for(var url in items) { newUrls.push(url.replace("frameset", "marc")); } pageByPage(marc, newUrls); } Zotero.wait(); }'); REPLACE INTO translators VALUES ('add7c71c-21f3-ee14-d188-caf9da12728b', '1.0.0b3.r1', '', '2008-06-12 19:30:00', '1', '100', '4', 'Library Catalog (SIRSI)', 'Sean Takats', '/uhtbin/cgisirsi', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var xpath = ''//tr[th[@class="viewmarctags"]][td[@class="viewmarctags"]]''; if(doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { Zotero.debug("SIRSI detectWeb: viewmarctags"); return "book"; } var xpath = ''//input[@name="VOPTIONS"]''; if(doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { Zotero.debug("SIRSI detectWeb: VOPTIONS"); return "book"; } var elmts = doc.evaluate(''/html/body/form//text()'', doc, nsResolver, XPathResult.ANY_TYPE, null); while(elmt = elmts.iterateNext()) { if(Zotero.Utilities.superCleanString(elmt.nodeValue) == "Viewing record") { Zotero.debug("SIRSI detectWeb: Viewing record"); return "book"; } } var xpath = ''//td[@class="searchsum"]/table''; if(doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { Zotero.debug("SIRSI detectWeb: searchsum"); return "multiple"; } var xpath = ''//form[@name="hitlist"]/table/tbody/tr''; if(doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { Zotero.debug("SIRSI detectWeb: hitlist"); return "multiple"; } // var xpath = ''//input[@type="checkbox"]'' }', 'function scrape(doc) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var xpath = ''//tr[th[@class="viewmarctags"]][td[@class="viewmarctags"]]''; var elmts = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var elmt = elmts.iterateNext(); if(!elmt) { return false; } var newItem = new Zotero.Item("book"); newItem.extra = ""; authors = []; while(elmt) { try { var node = doc.evaluate(''./TD[1]/A[1]/text()[1]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if(!node) { var node = doc.evaluate(''./TD[1]/text()[1]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); } if(node) { var casedField = Zotero.Utilities.superCleanString(doc.evaluate(''./TH[1]/text()[1]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().nodeValue); field = casedField.toLowerCase(); var value = Zotero.Utilities.superCleanString(node.nodeValue); if(field == "publisher") { newItem.publisher = value; } else if(field == "pub date") { var re = /[0-9]+/; var m = re.exec(value); newItem.date = m[0]; } else if(field == "isbn") { var re = /^[0-9](?:[0-9X]+)/; var m = re.exec(value); newItem.ISBN = m[0]; } else if(field == "title" || field == "t├¡tulo") { var titleParts = value.split(" / "); newItem.title = Zotero.Utilities.capitalizeTitle(titleParts[0]); } else if(field == "publication info" || field == "publicaci├│n") { var pubParts = value.split(" : "); newItem.place = pubParts[0]; if (pubParts[1].match(/\d+/)) newItem.date = pubParts[1].match(/\d+/)[0]; } else if(field == "personal author" || field == "autor personal") { if(authors.indexOf(value) == -1) { value = value.replace(/(\(|\)|\d+|\-)/g, ""); newItem.creators.push(Zotero.Utilities.cleanAuthor(value, "author", true)); authors.push(value); } } else if(field == "author"){ if(authors.indexOf(value) == -1) { newItem.creators.push(Zotero.Utilities.cleanAuthor(value, "author", true)); authors.push(value); } } else if(field == "added author") { if(authors.indexOf(value) == -1) { newItem.creators.push(Zotero.Utilities.cleanAuthor(value, "contributor", true)); authors.push(value); } } else if(field == "corporate author") { if(authors.indexOf(value) == -1) { newItem.creators.push({lastName:value, fieldMode:true}); authors.push(value); } } else if(field == "edition") { newItem.edition = value; } else if(field == "subject term" || field == "corporate subject" || field == "geographic term" || field == "subject") { var subjects = value.split("--"); for(var i=0; i<subjects.length; i++) { if(newItem.tags.indexOf(subjects[i]) == -1) { newItem.tags.push(subjects[i]); } } } else if(field == "personal subject") { var subjects = value.split(", "); var tag = value[0]+", "+value[1]; if(newItems.tag.indexOf(tag) == -1) { newItem.tags.push(tag); } } else if(value && field != "http") { newItem.extra += casedField+": "+value+"\n"; } } } catch (e) {} elmt = elmts.iterateNext(); } if(newItem.extra) { newItem.extra = newItem.extra.substr(0, newItem.extra.length-1); } var callNumber = doc.evaluate(''//tr/td[1][@class="holdingslist"]/text()'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if(callNumber && callNumber.nodeValue) { newItem.callNumber = callNumber.nodeValue; } var domain = doc.location.href.match(/https?:\/\/([^/]+)/); newItem.repository = domain[1]+" Library Catalog"; newItem.complete(); return true; } function doWeb(doc, url){ var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var sirsiNew = true; //toggle between SIRSI -2003 and SIRSI 2003+ var xpath = ''//td[@class="searchsum"]/table''; if(doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { Zotero.debug("SIRSI doWeb: searchsum"); sirsiNew = true; } else if (doc.evaluate(''//form[@name="hitlist"]/table/tbody/tr'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { Zotero.debug("SIRSI doWeb: hitlist"); sirsiNew = false; } else if (doc.evaluate(''//tr[th[@class="viewmarctags"]][td[@class="viewmarctags"]]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { Zotero.debug("SIRSI doWeb: viewmarctags"); sirsiNew = true; } else if (doc.evaluate(''//input[@name="VOPTIONS"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { Zotero.debug("SIRSI doWeb: VOPTIONS"); sirsiNew = false; } else { var elmts = doc.evaluate(''/html/body/form//text()'', doc, nsResolver, XPathResult.ANY_TYPE, null); while(elmt = elmts.iterateNext()) { if(Zotero.Utilities.superCleanString(elmt.nodeValue) == "Viewing record") { Zotero.debug("SIRSI doWeb: Viewing record"); sirsiNew = false; } } } if (sirsiNew) { //executes Simon''s SIRSI 2003+ scraper code Zotero.debug("Running SIRSI 2003+ code"); if(!scrape(doc)) { var checkboxes = new Array(); var urls = new Array(); var availableItems = new Array(); //begin IUCAT fixes by Andrew Smith var iuRe = /^https?:\/\/www\.iucat\.iu\.edu/; var iu = iuRe.exec(url); //IUCAT fix 1 of 2 if (iu){ var tableRows = doc.evaluate(''//td[@class="searchsum"]/table[//input[@class="submitLink"]]'', doc, nsResolver, XPathResult.ANY_TYPE, null); } else{ var tableRows = doc.evaluate(''//td[@class="searchsum"]/table[//input[@value="Details"]]'', doc, nsResolver, XPathResult.ANY_TYPE, null); } var tableRow = tableRows.iterateNext(); // skip first row // Go through table rows while(tableRow = tableRows.iterateNext()) { //IUCAT fix 2 of 2 if (iu){ var input = doc.evaluate(''.//input[@class="submitLink"]'', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); var text = doc.evaluate(''.//label/span'', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; } else { var input = doc.evaluate(''.//input[@value="Details"]'', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); var text = doc.evaluate(''.//label/strong'', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; } //end IUCAT fixes by Andrew Smith if(text) { availableItems[input.name] = text; } } var items = Zotero.selectItems(availableItems); if(!items) { return true; } var hostRe = new RegExp("^http(?:s)?://[^/]+"); var m = hostRe.exec(doc.location.href); Zotero.debug("href: " + doc.location.href); var hitlist = doc.forms.namedItem("hitlist"); var baseUrl = m[0]+hitlist.getAttribute("action")+"?first_hit="+hitlist.elements.namedItem("first_hit").value+"&last_hit="+hitlist.elements.namedItem("last_hit").value; var uris = new Array(); for(var i in items) { uris.push(baseUrl+"&"+i+"=Details"); } Zotero.Utilities.processDocuments(uris, function(doc) { scrape(doc) }, function() { Zotero.done() }, null); Zotero.wait(); } } else{ //executes Simon''s SIRSI -2003 translator code Zotero.debug("Running SIRSI -2003 code"); var uri = doc.location.href; var recNumbers = new Array(); var xpath = ''//form[@name="hitlist"]/table/tbody/tr''; var elmts = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var elmt = elmts.iterateNext(); if(elmt) { // Search results page var uriRegexp = /^http:\/\/[^\/]+/; var m = uriRegexp.exec(uri); var postAction = doc.forms.namedItem("hitlist").getAttribute("action"); var newUri = m[0]+postAction.substr(0, postAction.length-1)+"40"; var titleRe = /<br>\s*(.*[^\s])\s*<br>/i; var items = new Array(); do { var checkbox = doc.evaluate(''.//input[@type="checkbox"]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); // Collect title var title = doc.evaluate("./td[2]", elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; if(checkbox && title) { items[checkbox.name] = Zotero.Utilities.cleanString(title); } } while(elmt = elmts.iterateNext()); items = Zotero.selectItems(items); if(!items) { return true; } for(var i in items) { recNumbers.push(i); } } else { // Normal page // this regex will fail about 1/100,000,000 tries var uriRegexp = /^((.*?)\/([0-9]+?))\//; var m = uriRegexp.exec(uri); var newUri = m[1]+"/40" var elmts = doc.evaluate(''/html/body/form'', doc, nsResolver, XPathResult.ANY_TYPE, null); while(elmt = elmts.iterateNext()) { var initialText = doc.evaluate(''.//text()[1]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if(initialText && initialText.nodeValue && Zotero.Utilities.superCleanString(initialText.nodeValue) == "Viewing record") { recNumbers.push(doc.evaluate(''./b[1]/text()[1]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().nodeValue); break; } } // begin Emory compatibility var elmts = doc.evaluate(''//input[@name="first_hit"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); while (elmt = elmts.iterateNext()) { recNumbers.length = 0; var recNumber = elmt.value; recNumbers.push(recNumber); break; } // end Emory compatibility } var translator = Zotero.loadTranslator("import"); translator.setTranslator("a6ee60df-1ddc-4aae-bb25-45e0537be973"); var marc = translator.getTranslatorObject(); Zotero.Utilities.loadDocument(newUri+''?marks=''+recNumbers.join(",")+''&shadow=NO&format=FLAT+ASCII&sort=TITLE&vopt_elst=ALL&library=ALL&display_rule=ASCENDING&duedate_code=l&holdcount_code=t&DOWNLOAD_x=22&DOWNLOAD_y=12&address=&form_type='', function(doc) { var pre = doc.getElementsByTagName("pre"); var text = pre[0].textContent; var documents = text.split("*** DOCUMENT BOUNDARY ***"); for(var j=1; j<documents.length; j++) { var uri = newUri+"?marks="+recNumbers[j]+"&shadow=NO&format=FLAT+ASCII&sort=TITLE&vopt_elst=ALL&library=ALL&display_rule=ASCENDING&duedate_code=l&holdcount_code=t&DOWNLOAD_x=22&DOWNLOAD_y=12&address=&form_type="; var lines = documents[j].split("\n"); var record = new marc.record(); var tag, content; var ind = ""; for(var i=0; i<lines.length; i++) { var line = lines[i]; if(line[0] == "." && line.substr(4,2) == ". ") { if(tag) { content = content.replace(/\|([a-z])/g, marc.subfieldDelimiter+"$1"); record.addField(tag, ind, content); } } else { content += " "+line.substr(6); continue; } tag = line.substr(1, 3); if(tag[0] != "0" || tag[1] != "0") { ind = line.substr(6, 2); content = line.substr(8); } else { content = line.substr(7); if(tag == "000") { tag = undefined; record.leader = "00000"+content; Zotero.debug("the leader is: "+record.leader); } } } var newItem = new Zotero.Item(); record.translate(newItem); var domain = url.match(/https?:\/\/([^/]+)/); newItem.repository = domain[1]+" Library Catalog"; newItem.complete(); } Zotero.done(); }); Zotero.wait(); } }'); REPLACE INTO translators VALUES ('a77690cf-c5d1-8fc4-110f-d1fc765dcf88', '1.0.0b3.r1', '', '2008-09-22 21:30:00', '1', '100', '4', 'ProQuest', 'Simon Kornblith', '^https?://[^/]+/(pqdlink|pqdweb)\?((?:.*\&)?did=.*&Fmt=[0-9]|(?:.*\&)Fmt=[0-9].*&did=|(?:.*\&)searchInterface=|(?:.*\&)TS=[0-9])', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; if(doc.evaluate(''//img[substring(@src, string-length(@src)-32) = "/images/common/logo_proquest.gif" or substring(@src, string-length(@src)-38) = "/images/common/logo_proquest_small.gif"]'', doc, nsResolver, XPathResult.ANY_TYPE, null)) { var xpath = ''//table[@id="tableIndexTerms"]/tbody/tr/td[@class="textSmall"]''; var data= doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var aitem; var source; while(aitem = data.iterateNext()) { source=aitem.textContent; if(source=="Source type:") { source=data.iterateNext().textContent; Zotero.debug("Item Source Type: "+source); break; } } if(doc.title == "Results") { return "multiple"; } else if(doc.title == "Document View") { switch (source) { case ''Dissertation'': return "thesis"; break; case ''Historical Newspaper'': case ''Newspaper'': return "newspaperArticle"; default: return "journalArticle"; break; } } } } //^https?://[^/]+/pqdweb\?((?:.*\&)?did=.*&Fmt=[0-9]|(?:.*\&)Fmt=[0-9].*&did=|(?:.*\&)searchInterface=)', 'function parseRIS(uris) { Zotero.Utilities.HTTP.doGet(uris, function(text, xmlhttp, url){ // load translator for RIS if(url.match("exportFormat=1")=="exportFormat=1") { var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); // Strip lines with just whitespace, which mess up RIS parsing text = text.replace(/^\s*$\n/gm, ''''); translator.setString(text); //Set Handler fixes anomaly in Proquest RIS format. Properly formats author name as [last name], [first name] translator.setHandler("itemDone", function(obj, item) { var cre = new Array(); cre = item.creators; for each(var e in cre) { if(!e[''firstName'']) { //check if there is a first name, if not, take the first word in the last name var names = e[''lastName''].split(" "); e[''firstName'']=names[0]; e[''lastName'']=""; for(var i = 1; i<names.length; i++) { e[''lastName'']+=names[i]; } } } if (item.publicationTitle) item.publicationTitle = Zotero.Utilities.trimInternal(item.publicationTitle.replace(/\([\d\-]+\)/g, "")); item.complete(); }); translator.translate(); Zotero.done(); } }, function() {}); Zotero.wait(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var hostRegexp = new RegExp("^(https?://[^/]+)/"); var hMatch = hostRegexp.exec(url); var host = hMatch[1]; if(doc.evaluate(''//img[substring(@src, string-length(@src)-32) = "/images/common/logo_proquest.gif" or substring(@src, string-length(@src)-38) = "/images/common/logo_proquest_small.gif"]'', doc, nsResolver, XPathResult.ANY_TYPE, null)) { if(doc.title == "Results") { //Get Client ID var xpath = ''//a''; var data= doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var aitem; var clientID; while(aitem = data.iterateNext()) { clientID=aitem.href; if(clientID.indexOf("clientId")!=-1) { clientID = clientID.substr(clientID.indexOf("clientId")+9,clientID.length); break; } } var multXpath = ''//input[@name="chk"][@type="checkbox"]''; var titleXpath = ''//a[@class="bold"]''; var mInfos = doc.evaluate(multXpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var titleElmts = doc.evaluate(titleXpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var titleElmt; var mInfo; mInfo = mInfos.iterateNext(); titleElmt = titleElmts.iterateNext(); var items = new Array(); do { //Get item ID var str= mInfo.value; str= str.replace("retrieveGroup", "sid"); var url = host+"/pqdweb?RQT=530&markedListInfo="+str+"1"; items[url] = Zotero.Utilities.trimInternal(titleElmt.textContent); } while((mInfo = mInfos.iterateNext()) && (titleElmt = titleElmts.iterateNext())); items = Zotero.selectItems(items); if(!items) return true; //Array of URLs for the doGet var uris = new Array(); //Clear Basket uris.push(host+"/pqdweb?RQT=531&clientId="+clientID); uris.push(host+"/pqdweb?RQT=532&clientId="+clientID); //Add URLS to the basket for(var bibcode in items) { uris.push(bibcode); } //Export basket as a RIS file uris.push(host+"/pqdweb?RQT=532&clientId="+clientID); uris.push(host+"/pqdweb?RQT=562&MRR=M&clientId="+clientID); uris.push(host+"/pqdweb?RQT=562&exportFormat=1&clientId="+clientID); parseRIS(uris); } else { //Get Client ID var xpath = ''//a''; var data= doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var aitem; var clientID; while(aitem = data.iterateNext()) { clientID=aitem.href; if(clientID.indexOf("clientId")!=-1) { clientID = clientID.substr(clientID.indexOf("clientId")+9,clientID.length); break; } } //Get item ID var xpath = ''//input[@name="marked"][@type="checkbox"]''; var str= doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().value; str= str.replace("retrieveGroup", "sid"); //Array of URLs for the doGet var uris = new Array(); //Clear Basket uris.push(host+"/pqdweb?RQT=531&clientId="+clientID); uris.push(host+"/pqdweb?RQT=532&clientId="+clientID); //Create URL to add item to basket url = host+"/pqdweb?RQT=530&markedListInfo="+str+"1"; Zotero.debug("RIS URL: "+url); uris.push(url); //Export basket as a RIS file uris.push(host+"/pqdweb?RQT=532&clientId="+clientID); uris.push(host+"/pqdweb?RQT=562&MRR=M&clientId="+clientID); uris.push(host+"/pqdweb?RQT=562&exportFormat=1&clientId="+clientID); parseRIS(uris); } } }'); REPLACE INTO translators VALUES ('6773a9af-5375-3224-d148-d32793884dec', '1.0.0b3.r1', '', '2006-12-18 06:00:45', '1', '100', '4', 'InfoTrac', 'Simon Kornblith', '^https?://[^/]+/itw/infomark/', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; // ensure that there is an InfoTrac logo if(!doc.evaluate(''//img[substring(@alt, 1, 8) = "InfoTrac"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) return false; if(doc.title.substring(0, 8) == "Article ") { var genre = doc.evaluate(''//comment()[substring(., 1, 6) = " Genre"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if(genre) { var value = Zotero.Utilities.cleanString(genre.nodeValue.substr(7)); if(value == "article") { return "journalArticle"; } else if(value == "book") { return "book"; } else if(value == "dissertation") { return "thesis"; } else if(value == "bookitem") { return "bookSection"; } } return "magazineArticle"; } else if(doc.title.substring(0, 10) == "Citations ") { return "multiple"; } }', 'function extractCitation(url, elmts, title, doc) { var newItem = new Zotero.Item(); newItem.url = url; if(title) { newItem.title = Zotero.Utilities.superCleanString(title); } while(elmt = elmts.iterateNext()) { var colon = elmt.nodeValue.indexOf(":"); var field = elmt.nodeValue.substring(1, colon).toLowerCase(); var value = elmt.nodeValue.substring(colon+1, elmt.nodeValue.length-1); if(field == "title") { newItem.title = Zotero.Utilities.superCleanString(value); } else if(field == "journal") { newItem.publicationTitle = value; } else if(field == "pi") { parts = value.split(" "); var date = ""; var field = null; for(j in parts) { firstChar = parts[j].substring(0, 1); if(firstChar == "v") { newItem.itemType = "journalArticle"; field = "volume"; } else if(firstChar == "i") { field = "issue"; } else if(firstChar == "p") { field = "pages"; var pagesRegexp = /p(\w+)\((\w+)\)/; // weird looking page range var match = pagesRegexp.exec(parts[j]); if(match) { // yup, it''s weird var finalPage = parseInt(match[1])+parseInt(match[2]) parts[j] = "p"+match[1]+"-"+finalPage.toString(); } else if(!newItem.itemType) { // no, it''s normal // check to see if it''s numeric, bc newspaper pages aren''t var justPageNumber = parts[j].substr(1); if(parseInt(justPageNumber).toString() != justPageNumber) { newItem.itemType = "newspaperArticle"; } } } else if(!field) { // date parts at the beginning, before // anything else date += " "+parts[j]; } if(field) { isDate = false; if(parts[j] != "pNA") { // make sure it''s not an invalid // page number // chop of letter newItem[field] = parts[j].substring(1); } else if(!newItem.itemType) { // only newspapers are missing // page numbers on infotrac newItem.itemType = "newspaperArticle"; } } } // Set type if(!newItem.itemType) { newItem.itemType = "magazineArticle"; } if(date != "") { newItem.date = date.substring(1); } } else if(field == "author") { var author = Zotero.Utilities.cleanAuthor(value, "author", true); // ensure author is not already there var add = true; for each(var existingAuthor in newItem.creators) { if(existingAuthor.firstName == author.firstName && existingAuthor.lastName == author.lastName) { add = false; break; } } if(add) newItem.creators.push(author); } else if(field == "issue") { newItem.issue = value; } else if(field == "volume") { newItem.volume = value; } else if(field == "issn") { newItem.ISSN = value; } else if(field == "gjd") { var m = value.match(/\(([0-9]{4}[^\)]*)\)(?:, pp\. ([0-9\-]+))?/); if(m) { newItem.date = m[1]; newItem.pages = m[2]; } } else if(field == "BookTitle") { newItem.publicationTitle = value; } else if(field == "genre") { value = value.toLowerCase(); if(value == "article") { newItem.itemType = "journalArticle"; } else if(value == "book") { newItem.itemType = "book"; } else if(value == "dissertation") { newItem.itemType = "thesis"; } else if(value == "bookitem") { newItem.itemType = "bookSection"; } } } if(doc) { newItem.attachments.push({document:doc, title:"InfoTrac Snapshot"}); } else { newItem.attachments.push({url:url, title:"InfoTrac Snapshot", mimeType:"text/html"}); } newItem.complete(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var uri = doc.location.href; if(doc.title.substring(0, 8) == "Article ") { // article var xpath = ''/html/body//comment()''; var elmts = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null); extractCitation(uri, elmts); } else { // search results var items = new Array(); var uris = new Array(); var elmts = new Array(); var host = doc.location.href.match(/^https?:\/\/[^\/]+/)[0]; var tableRows = doc.evaluate(''/html/body//table/tbody/tr/td[a/b]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var tableRow; var javaScriptRe = /''([^'']*)'' *, *''([^'']*)''/ var i = 0; // Go through table rows while(tableRow = tableRows.iterateNext()) { var link = doc.evaluate(''./a'', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); var m = javaScriptRe.exec(link.href); if(m) { uris[i] = host+"/itw/infomark/192/215/90714844w6"+m[1]+"?sw_aep=olr_wad"+m[2]; } var article = doc.evaluate(''./b/text()'', link, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); items[i] = article.nodeValue; // Chop off final period if(items[i].substr(items[i].length-1) == ".") { items[i] = items[i].substr(0, items[i].length-1); } elmts[i] = doc.evaluate(".//comment()", tableRow, nsResolver, XPathResult.ANY_TYPE, null); i++; } items = Zotero.selectItems(items); if(!items) { return true; } for(var i in items) { extractCitation(uris[i], elmts[i], items[i]); } } }'); REPLACE INTO translators VALUES ('63c25c45-6257-4985-9169-35b785a2995e', '1.0.0b3.r1', '', '2006-12-15 03:40:00', 1, 100, 4, 'InfoTrac OneFile', 'Simon Kornblith', '^https?://[^/]+/itx/(?:[a-z]+Search|retrieve|paginate|tab)\.do', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; if(doc.evaluate(''//img[@alt="Thomson Gale"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { if(doc.evaluate(''//table[@class="resultstable"][tbody/tr[@class="unselectedRow"]]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else { return "journalArticle"; } } }', 'function infoTracRIS(text) { // load translator for RIS var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { if(item.notes && item.notes[0]) { item.extra = item.notes[0].note; delete item.notes; item.notes = undefined; } // get underscored terms (term headings?) out of tags for(var i in item.tags) { var index = item.tags[i].indexOf("_"); if(index != -1) { item.tags[i] = item.tags[i].substr(0, index); } } // add names to attachments for(var i in item.attachments) { if(!item.attachments[i].title) { item.attachments[i] = undefined; } else { item.attachments[i].title = "InfoTrac OneFile "+item.attachments[i].title; } } //item.attachments = newAttachments.shift(); //Zotero.debug(item.attachments); item.complete(); }); translator.translate(); Zotero.done(); } function readEncoded(url) { var newArray = new Array(); var parts = url.split(/[?&]/); for each(var part in parts) { var index = part.indexOf("="); if(index !== -1) { newArray[part.substr(0, index)] = part.substr(index+1); } } return newArray; } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var hostRe = new RegExp("^https?://[^/]+/"); var host = hostRe.exec(doc.location.href)[0]; if(doc.evaluate(''//table[@class="resultstable"][tbody/tr[@class="unselectedRow"]]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var items = Zotero.Utilities.getItemArray(doc, doc, ''^https?://[^/]+/itx/retrieve\\.do\\?.*docId=''); items = Zotero.selectItems(items); if(!items) { return true; } // parse things out of URLs var time = new Date(); time = time.getTime(); var markedString = ""; for(var i in items) { var postVal = readEncoded(i); markedString += postVal.tabID+"_"+postVal.docId+"_1_0_"+postVal.contentSet+"_srcprod="+postVal.prodId+"|^"; } var postData = "inPS=true&ts="+time+"&prodId="+postVal.prodId+"&actionCmd=UPDATE_MARK_LIST&userGroupName="+postVal.userGroupName+"&markedString="+markedString+"&a="+time; Zotero.Utilities.HTTP.doGet(host+"itx/marklist.do?inPS=true&ts="+time+"&prodId="+postVal.prodId+"&actionCmd=CLEAR_MARK_LIST&userGroupName="+postVal.userGroupName, function(text) { // clear marked Zotero.Utilities.HTTP.doPost(host+"itx/marklist.do", postData, function(text) { // mark Zotero.Utilities.HTTP.doGet(host+"itx/generateCitation.do?contentSet="+postVal.contentSet+"&inPS=true&tabID=T-ALL&prodId="+postVal.prodId+"&docId=&actionString=FormatCitation&userGroupName="+postVal.userGroupName+"&citationFormat=ENDNOTE", function(text) { // get marked infoTracRIS(text); }); }); }); } else { // just extract from single page var postVal = readEncoded(url); Zotero.Utilities.HTTP.doGet(host+"itx/generateCitation.do?contentSet="+postVal.contentSet+"&inPS=true&tabID="+postVal.tabID+"&prodId="+postVal.prodId+"&docId="+postVal.docId+"&actionString=FormatCitation&citationFormat=ENDNOTE", function(text) { infoTracRIS(text); }); } Zotero.wait(); }'); REPLACE INTO translators VALUES ('b047a13c-fe5c-6604-c997-bef15e502b09', '1.0.0b3.r1', '', '2008-03-18 02:30:00', '1', '100', '4', 'LexisNexis', 'Sean Takats', 'https?://[^/]*lexis-?nexis\.com[^/]*/us/lnacademic', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; if (doc.title.substr(doc.title.length-8, 8)=="Document"){ var xpath = ''//input[@name="cisb"]''; var elmt = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null); if (elmt.iterateNext()){ return "newspaperArticle"; } } var xpath = ''//input[@name="frm_tagged_documents" and @type="checkbox"]''; var elmt = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null); if (elmt.iterateNext()){ return "multiple"; } }', 'function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; // define results navigation frame doc for export buttons and hidden fields var rfDoc = doc.defaultView.window.top.frames[1].document; var xpath = ''//img[@title="Export Bibliographic References"]''; var elmt = doc.evaluate(xpath, rfDoc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); var hostRe = new RegExp("^http(?:s)?://[^/]+"); var m = hostRe.exec(doc.location.href); var host = m[0]; var risb = doc.evaluate(''//input[@name="risb"]'', rfDoc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().value; var cisb = doc.evaluate(''//input[@name="cisb"]'', rfDoc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().value; var uri = host+"/us/lnacademic/results/listview/delPrep.do?cisb="+cisb+"&risb="+risb+"&mode=delivery_refworks"; var hiddenInputs = doc.evaluate(''//form[@name="results_docview_DocumentForm"]//input[@type="hidden" and not(@name="tagData")]'', rfDoc, nsResolver, XPathResult.ANY_TYPE, null); var hiddenInput; var poststring=""; while(hiddenInput = hiddenInputs.iterateNext()) { poststring = poststring+"&"+hiddenInput.name+"="+encodeURIComponent(hiddenInput.value); } var xpath = ''//input[@name="frm_tagged_documents" and @type="checkbox"]''; var elmt = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null); if (doc.title.substr(doc.title.length-8, 8)=="Document"){ // single page var delRange = "cur"; poststring = poststring + "&hiddensearchfield=Narrow+Search&reloadClassif=&format=GNBFI&focusTerms=&nextSteps=0"; } else { // get multiple item titles and tags var xpath = ''//tr[td/input[@name="frm_tagged_documents"]]''; var rows = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var title; var tagNumber; var items = new Object(); while (row = rows.iterateNext()){ title = doc.evaluate(''.//a'', row, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; tagNumber = doc.evaluate(''./td/input[@name="frm_tagged_documents"]'', row, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().value; items[tagNumber] = title; } var tagData = ""; items = Zotero.selectItems(items); if (!items) { return true; } for (var i in items) { tagData += "-"+i; } tagData = tagData.substr(1); var delRange = "tag"; poststring = poststring + "&tagData=" + tagData + "&hiddensearchfield=Narrow+Search&reloadClassif=&selDomainID=4&format=GNBLIST&focusTerms=&sort=RELEVANCE&nextSteps=0"; } Zotero.Utilities.HTTP.doPost(uri, poststring, function(text) { uri = host+"/us/lnacademic/delivery/refExport.do"; var disb = text.match(/<input type="hidden" name="disb" value="([^"]+)">/); poststring = "delRange="+delRange+"&selDocs=&disb="+disb[1]+"&initializationPage=0"; Zotero.Utilities.HTTP.doPost(uri, poststring, function(text) { uri = text.match(/&url=([^'']+)''/) uri = decodeURIComponent(uri[1]); uri = uri.replace(/http:\/\/[^/]*\//, host+"/"); var uris = new Array(); uris.push(uri); Zotero.Utilities.processDocuments(uris, function(newDoc){ var elmts =newDoc.evaluate(''//html'', newDoc, nsResolver, XPathResult.ANY_TYPE, null); var elmt; while (elmt = elmts.iterateNext()){ var newItem = new Zotero.Item("newspaperArticle"); var title = newDoc.evaluate(''.//div[@class="HEADLINE"]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if (title.textContent){ newItem.title = title.textContent; }else{ newItem.title = " "; } var date = newDoc.evaluate(''.//meta[@name="_lndateissue"]/@content'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if (date){ date = date.nodeValue; var m = date.match(/([^T]+)T/); date = m[1]; if (date.length == 8){ date = date.substr(0,4) + "-" + date.substr(4,2) + "-" + date.substr(6,2); } else if (date.length == 6){ date = date.substr(0,4) + "-" + date.substr(4,2); } newItem.date = date; } var publicationTitle = newDoc.evaluate(''.//div[@class="PUB"]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if (publicationTitle){ newItem.publicationTitle = publicationTitle.textContent; } var section = newDoc.evaluate(''.//div[@class="SECTION-INFO"]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if (section){ newItem.section = section.textContent; } var author = newDoc.evaluate(''.//div[@class="BYLINE"]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if (author){ newItem.creators.push(Zotero.Utilities.cleanAuthor(author.textContent, "author")); } newItem.repository = "lexisnexis.com"; newItem.url = url; newItem.complete() } Zotero.done(); }); }); }); Zotero.wait(); }'); REPLACE INTO translators VALUES ('5e3e6245-83da-4f55-a39b-b712df54a935', '1.0.0b3.r1', '', '2008-05-19 17:20:00', '0', '90', '4', 'Melvyl', 'Sean Takats and Michael Berkowitz', '^https?://(?:melvyl.cdlib.org|melvyl-dev.cdlib.org:8162)/F(?:/[A-Z0-9\-]+(?:\?.*)?$|\?func=find|\?func=scan)', 'function detectWeb(doc, url) { var singleRe = new RegExp("^https?://[^/]+/F/[A-Z0-9\-]+\?.*(?:func=full-set-set.*\&format=[0-9]{3}|func=direct)"); if(singleRe.test(doc.location.href)) { return "book"; } else { var tags = doc.getElementsByTagName("a"); for(var i=0; i<tags.length; i++) { if(singleRe.test(tags[i].href)) { return "multiple"; } } } }', 'function doWeb(doc, url) { var detailRe = new RegExp("^https?://[^/]+/F/[A-Z0-9\-]+\?.*(?:func=full-set-set.*\&format=[0-9]{3}|func=direct)"); var uri = doc.location.href; var newUris = new Array(); if(detailRe.test(uri)) { newUris.push(uri.replace(/\&format=[0-9]{3}/, "&format=001")) } else { var itemRegexp = ''^https?://[^/]+/F/[A-Z0-9\-]+\?.*(?:func=full-set-set.*\&format=999|func=direct)''; var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var reviewXpath = ''//table/tbody/tr[td[@class="resultsDisplayWhite"]]'' var reviewRows = doc.evaluate(reviewXpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var reviewRow; var items = new Array(); if (reviewRow = reviewRows.iterateNext()){ var xpath = ''./td[@class="resultsDisplayWhite"][2]/a[1]''; var titleXpath = ''./td[@class="resultsDisplayWhite"][5]''; var elmt; var titleElmt; do { elmt = doc.evaluate(xpath, reviewRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); titleElmt = doc.evaluate(titleXpath, reviewRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); items[elmt.href] = Zotero.Utilities.cleanString(titleElmt.textContent); } while (reviewRow = reviewRows.iterateNext()); } else { var xpath = ''//td[2][@class="resultsBrief"]/a[1]''; // gets MELVYL links var elmts = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var elmt; var titleXpath = ''//tr[td[@class="resultsBrief"][@id="bold"]/b[text()="Title"]]/td[4]''; // gets MELVYL results titles var titleElmts = doc.evaluate(titleXpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var titleElmt; while ((elmt = elmts.iterateNext()) && (titleElmt = titleElmts.iterateNext())){ items[elmt.href] = Zotero.Utilities.cleanString(titleElmt.textContent); } } items = Zotero.selectItems(items); if(!items) { return true; } for(var i in items) { var newUri = i.replace(/\&format=[0-9]{3}/, "&format=001") if(newUri == i) { newUri += "&format=001"; } newUris.push(newUri); } } var translator = Zotero.loadTranslator("import"); translator.setTranslator("a6ee60df-1ddc-4aae-bb25-45e0537be973"); var marc = translator.getTranslatorObject(); Zotero.Utilities.processDocuments(newUris, function(newDoc) { var uri = newDoc.location.href; var namespace = newDoc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var xpath = ''//tr[td[1][@class="contentSmall"][@id="bold"]/strong]''; var elmts = newDoc.evaluate(xpath, newDoc, nsResolver, XPathResult.ANY_TYPE, null); var elmt; var record = new marc.record(); while(elmt = elmts.iterateNext()) { var field = Zotero.Utilities.trimInternal(newDoc.evaluate(''./TD[1]/strong/text()[1]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().nodeValue); var value = newDoc.evaluate(''./TD[2]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; if(field == "LDR") { record.leader = value; } else if(field != "FMT") { value = value.replace(/\|([a-z]) /g, marc.subfieldDelimiter+"$1"); var code = field.substring(0, 3); var ind = ""; if(field.length > 3) { ind = field[3]; if(field.length > 4) { ind += field[4]; } } record.addField(code, ind, value); } } var newItem = new Zotero.Item(); record.translate(newItem); var domain = url.match(/https?:\/\/([^/]+)/); newItem.repository = domain[1]+" Library Catalog"; newItem.complete(); }, function() { Zotero.done(); }, null); Zotero.wait(); }'); REPLACE INTO translators VALUES ('cf87eca8-041d-b954-795a-2d86348999d5', '1.0.0b3.r1', '', '2008-06-10 22:30:00', '1', '100', '4', 'Library Catalog (Aleph)', 'Simon Kornblith and Michael Berkowitz', 'https?://[^/]+/F(?:/[A-Z0-9\-]+(?:\?.*)?$|\?func=find|\?func=scan|\?func=short)', 'function detectWeb(doc, url) { var singleRe = new RegExp("^https?://[^/]+/F/[A-Z0-9\-]+\?.*(?:func=full-set-set.*\&format=[0-9]{3}|func=direct|func=myshelf-full.*)"); if(singleRe.test(doc.location.href)) { return "book"; } else { var tags = doc.getElementsByTagName("a"); for(var i=0; i<tags.length; i++) { if(singleRe.test(tags[i].href)) { return "multiple"; } } } }', 'function doWeb(doc, url) { var detailRe = new RegExp("^https?://[^/]+/F/[A-Z0-9\-]+\?.*(?:func=full-set-set.*\&format=[0-9]{3}|func=direct|func=myshelf-full.*)"); var mab2Opac = new RegExp("^https?://[^/]+berlin|193\.30\.112\.134|duisburg-essen/F/[A-Z0-9\-]+\?.*"); var uri = doc.location.href; var newUris = new Array(); if(detailRe.test(uri)) { var newuri = uri.replace(/\&format=[0-9]{3}/, "&format=001"); if (newuri == uri) newuri += "&format=001"; newUris.push(newuri); } else { var itemRegexp = ''^https?://[^/]+/F/[A-Z0-9\-]+\?.*(?:func=full-set-set.*\&format=999|func=direct|func=myshelf-full.*)'' var items = Zotero.Utilities.getItemArray(doc, doc, itemRegexp, ''^[0-9]+$''); // ugly hack to see if we have any items var haveItems = false; for(var i in items) { haveItems = true; break; } // If we don''t have any items otherwise, let us use the numbers if(!haveItems) { var items = Zotero.Utilities.getItemArray(doc, doc, itemRegexp); } items = Zotero.selectItems(items); if(!items) { return true; } for(var i in items) { var newUri = i.replace("&format=999", "&format=001"); if(newUri == i) { newUri += "&format=001"; } newUris.push(newUri); } } var translator = Zotero.loadTranslator("import"); if(mab2Opac.test(uri)) { translator.setTranslator("91acf493-0de7-4473-8b62-89fd141e6c74"); } else { translator.setTranslator("a6ee60df-1ddc-4aae-bb25-45e0537be973"); } var marc = translator.getTranslatorObject(); Zotero.Utilities.processDocuments(newUris, function(newDoc) { var uri = newDoc.location.href; var namespace = newDoc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var nonstandard = false; var xpath; if (newDoc.evaluate(''//*[tr[td/text()="LDR"]]/tr[td[2]]'', newDoc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { xpath = ''//*[tr[td/text()="LDR"]]/tr[td[2]]''; } else if (newDoc.evaluate(''//tr[2]//table[2]//tr'', newDoc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { xpath = ''//tr[2]//table[2]//tr[td[2]]''; nonstandard = true; } else if (newDoc.evaluate(''//table//tr[td[2][@class="td1"]]'', newDoc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { xpath = ''//table//tr[td[2][@class="td1"]]''; nonstandard = true; } else if (newDoc.evaluate(''//tr/td[2]/table/tbody[tr/td[contains(text(), "LDR")]]'', newDoc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { xpath = ''//tr/td[2]/table/tbody[tr/td[contains(text(), "LDR")]]/tr''; nonstandard = true; } var elmts = newDoc.evaluate(xpath, newDoc, nsResolver, XPathResult.ANY_TYPE, null); var elmt; var record = new marc.record(); while(elmt = elmts.iterateNext()) { if (nonstandard) { var field = Zotero.Utilities.superCleanString(newDoc.evaluate(''./td[1]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent); } else { var field = Zotero.Utilities.superCleanString(newDoc.evaluate(''./TD[1]/text()[1]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().nodeValue); } var field = Zotero.Utilities.superCleanString(newDoc.evaluate(''./td[1]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent); if(field) { var value = newDoc.evaluate(''./TD[2]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; //.split(/\n/)[1]; if (value.split(/\n/)[1]) value = Zotero.Utilities.trimInternal(value.split(/\n/)[1]); Zotero.debug(field + " : " + value); if(field == "LDR") { record.leader = value; } else if(field != "FMT") { value = value.replace(/\|([a-z]) /g, marc.subfieldDelimiter+"$1"); var code = field.substring(0, 3); var ind = ""; if(field.length > 3) { ind = field[3]; if(field.length > 4) { ind += field[4]; } } record.addField(code, ind, value); } } } var newItem = new Zotero.Item(); record.translate(newItem); var domain = url.match(/https?:\/\/([^/]+)/); newItem.repository = domain[1]+" Library Catalog"; for (var i in newItem.creators) { if (!newItem.creators[i][''firstName'']) { var name = newItem.creators[i][''lastName''].split(/([^\s]+)\s+(.*)$/); newItem.creators[i] = {lastName:name[1], firstName:name[2], creatorType:''author''}; } } var oldCreators = newItem.creators; newItem.creators = new Array(); var transient = new Array(); for each (var a in oldCreators) { if (a.lastName) { if (!a.lastName.match(/\d+/)) transient.push(a); } } for each (var a in transient) { if (a.firstName) { if (a.firstName.match(/\|/)) a.firstName = a.firstName.match(/([^|]+)\s+|/)[1]; } } newItem.creators = transient; newItem.title = newItem.title.replace(/(<<|>>)/g, ''''); newItem.complete(); }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('774d7dc2-3474-2684-392c-f787789ec63d', '1.0.0b3.r1', '', '2009-02-25 07:15:00', 1, 100, 4, 'Library Catalog (Dynix)', 'Simon Kornblith', 'ipac\.jsp\?.*(?:uri=(?:link|full)=[0-9]|menu=search)', 'function detectWeb(doc, url) { var detailsRe = new RegExp(''ipac\.jsp\?.*uri=(?:full|link)=[0-9]''); if(detailsRe.test(doc.location.href)) { return "book"; } else { return "multiple"; } }', 'function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var uri = doc.location.href; var detailsRe = new RegExp(''ipac\.jsp\?.*uri=(?:full|link)=[0-9]''); var uris = new Array(); if(detailsRe.test(uri)) { uris.push(uri+''&fullmarc=true''); } else { var items = Zotero.Utilities.getItemArray(doc, doc, "ipac\.jsp\?.*uri=(?:full|link)=[0-9]|^javascript:buildNewList\\(''.*uri%3Dfull%3D[0-9]", "Show details"); items = Zotero.selectItems(items); if(!items) { return true; } var buildNewList = new RegExp("^javascript:buildNewList\\(''([^'']+)"); var uris = new Array(); for(var i in items) { var m = buildNewList.exec(i); if(m) { uris.push(unescape(m[1]+''&fullmarc=true'')); } else { uris.push(i+''&fullmarc=true''); } } } var translator = Zotero.loadTranslator("import"); translator.setTranslator("a6ee60df-1ddc-4aae-bb25-45e0537be973"); var marc = translator.getTranslatorObject(); Zotero.Utilities.processDocuments(uris, function(newDoc) { var uri = newDoc.location.href; var namespace = newDoc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var xpath = ''//form/table[@class="tableBackground"]/tbody/tr/td/table[@class="tableBackground"]/tbody/tr[td[1]/a[@class="normalBlackFont1"]]''; var elmts = newDoc.evaluate(xpath, newDoc, nsResolver, XPathResult.ANY_TYPE, null); if (!elmts.iterateNext()) { var xpath2 = ''//form/table[@class="tableBackground"]/tbody/tr/td/table[@class="tableBackground"]/tbody/tr[td[1]/a[@class="boldBlackFont1"]]''; var elmts = newDoc.evaluate(xpath2, newDoc, nsResolver, XPathResult.ANY_TYPE, null); } var elmt; var record = new marc.record(); while(elmt = elmts.iterateNext()) { var field = Zotero.Utilities.superCleanString(newDoc.evaluate(''./TD[1]/A[1]/text()[1]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().nodeValue); var value = newDoc.evaluate(''./TD[2]/TABLE[1]/TBODY[1]/TR[1]/TD[1]/A[1]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); // value = null for non-marc table entries w/ that xpath if (!value) { value = ''''; } else { value = value.textContent; } if(field == "LDR") { record.leader = value; } else if(field != "FMT") { value = value.replace(/\$([a-z]) /g, marc.subfieldDelimiter+"$1"); var code = field.substring(0, 3); var ind = ""; if(field.length > 3) { ind = field[3]; if(field.length > 4) { ind += field[4]; } } record.addField(code, ind, value); } } var newItem = new Zotero.Item(); record.translate(newItem); var domain = url.match(/https?:\/\/([^/]+)/); newItem.repository = domain[1]+" Library Catalog"; newItem.complete(); }, function() { Zotero.done() }, null); Zotero.wait(); }'); REPLACE INTO translators VALUES ('63a0a351-3131-18f4-21aa-f46b9ac51d87', '1.0.0b3.r1', '', '2008-08-11 20:40:00', '1', '100', '4', 'Library Catalog (VTLS)', 'Simon Kornblith', '/chameleon(?:\?|$)', 'function detectWeb(doc, url) { var node = doc.evaluate(''//tr[@class="intrRow"]/td/table/tbody/tr[th]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext(); if(node) { return "multiple"; } var node = doc.evaluate(''//a[text()="marc"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext(); if(node) { return "book"; } }', 'function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var uri = doc.location.href; var newUris = new Array(); var marcs = doc.evaluate(''//a[text()="marc"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var record = marcs.iterateNext(); if(record && !marcs.iterateNext()) { newUris.push(record.href); } else { // Require link to match this var tagRegexp = new RegExp(); tagRegexp.compile("/chameleon\?.*function=CARDSCR"); var items = new Array(); var tableRows = doc.evaluate(''//tr[@class="intrRow"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var tableRow; // Go through table rows while(tableRow = tableRows.iterateNext()) { var links = tableRow.getElementsByTagName("a"); // Go through links var url; for(var j=0; j<links.length; j++) { if(tagRegexp.test(links[j].href)) { url = links[j].href; break; } } if(url) { // Collect title information var fields = doc.evaluate(''./td/table/tbody/tr[th]'', tableRow, nsResolver, XPathResult.ANY_TYPE, null); var field; while(field = fields.iterateNext()) { var header = doc.evaluate(''./th/text()'', field, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if(header.nodeValue == "Title") { var value = doc.evaluate(''./td'', field, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if(value) { items[url] = Zotero.Utilities.cleanString(value.textContent); } } } } } items = Zotero.selectItems(items); if(!items) { return true; } for(var i in items) { Zotero.debug(i.replace(/function=[A-Z]{7}/, "function=MARCSCR")); newUris.push(i.replace(/function=[A-Z]{7}/, "function=MARCSCR")); } } var translator = Zotero.loadTranslator("import"); translator.setTranslator("a6ee60df-1ddc-4aae-bb25-45e0537be973"); var marc = translator.getTranslatorObject(); Zotero.Utilities.processDocuments(newUris, function(newDoc) { var uri = newDoc.location.href var namespace = newDoc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var record = new marc.record(); // var xpath = ''//table[@class="outertable"]/tbody/tr[td[4]]''; //old xpath // xpaths from virginia college of osteopathic medicine // /html/body/table[@class="header2"]/tbody/tr/td[2]/table/tbody/tr/td/table/tbody/tr/td/table[@class="marctable"]/tbody/tr/td[1][@class="marcTag"] // /html/body/table[@class="header2"]/tbody/tr/td[2]/table/tbody/tr/td/table/tbody/tr/td/table[@class="marctable"]/tbody/tr/td[2] // /html/body/table[@class="header2"]/tbody/tr/td[2]/table/tbody/tr/td/table/tbody/tr/td/table[@class="marctable"]/tbody/tr/td[3] // /html/body/table[@class="header2"]/tbody/tr/td[2]/table/tbody/tr/td/table/tbody/tr/td/table[@class="marctable"]/tbody/tr/td[4][@class="marcSubfields"] var xpath = ''//table[@class="marctable"]/tbody/tr[td[4]]''; var elmts = newDoc.evaluate(xpath, newDoc, nsResolver, XPathResult.ANY_TYPE, null); while(elmt = elmts.iterateNext()) { var field = newDoc.evaluate(''./TD[1]/text()[1]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().nodeValue; var ind1 = newDoc.evaluate(''./TD[2]/text()[1]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().nodeValue; var ind2 = newDoc.evaluate(''./TD[3]/text()[1]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().nodeValue; var value = newDoc.evaluate(''./TD[4]/text()[1]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().nodeValue; value = value.replace(/\\([a-z]) /g, marc.subfieldDelimiter+"$1"); record.addField(field, ind1+ind2, value); } var newItem = new Zotero.Item(); record.translate(newItem); var domain = url.match(/https?:\/\/([^/]+)/); newItem.repository = domain[1]+" Library Catalog"; newItem.complete(); }, function(){ Zotero.done(); }, null); Zotero.wait(); }'); REPLACE INTO translators VALUES ('fb12ae9e-f473-cab4-0546-27ab88c64101', '1.0.0b3.r1', '', '2009-01-12 18:25:00', 1, 100, 4, 'Library Catalog (DRA)', 'Simon Kornblith', '/web2/tramp2\.exe/(?:see\_record/|authority\_hits/|goto/.*\?.*screen=Record\.html)', 'function detectWeb(doc, url) { if(doc.location.href.indexOf("/authority_hits") > 0) { return "multiple"; } else { return "book"; } }', 'function doWeb(doc, url) { var checkItems = false; if(doc.location.href.indexOf("/authority_hits") > 0) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; checkItems = Zotero.Utilities.gatherElementsOnXPath(doc, doc, "/html/body//ol/li", nsResolver); } if(checkItems && checkItems.length) { var items = Zotero.Utilities.getItemArray(doc, checkItems, ''https?://.*/web2/tramp2\.exe/see_record''); items = Zotero.selectItems(items); if(!items) { return true; } var uris = []; for(var i in items) { uris.push(i); } } else { var uris = [doc.location.href]; } for(var i in uris) { var uri = uris[i]; var uriRegexp = /^(https?:\/\/.*\/web2\/tramp2\.exe\/)(?:goto|see\_record|authority\_hits)(\/.*)\?(?:screen=Record\.html\&)?(.*)$/i; var m = uriRegexp.exec(uri); if(uri.indexOf("/authority_hits") < 0) { var newUri = m[1]+"download_record"+m[2]+"/RECORD.MRC?format=marc&"+m[3]; } else { var newUri = m[1]+"download_record"+m[2]+"/RECORD.MRC?format=marc"; } // Keep track of how many requests have been completed var j = 0; var translator = Zotero.loadTranslator("import"); translator.setTranslator("a6ee60df-1ddc-4aae-bb25-45e0537be973"); var domain = url.match(/https?:\/\/([^/]+)/); translator.setHandler("itemDone", function(obj, item) { item.repository = domain[1]+" Library Catalog"; item.complete(); }); Zotero.Utilities.HTTP.doGet(newUri, function(text) { translator.setString(text); translator.translate(); j++; if(j == uris.length) { Zotero.done(); } }); } Zotero.wait(); }'); REPLACE INTO translators VALUES ('c0e6fda6-0ecd-e4f4-39ca-37a4de436e15', '1.0.0b3.r1', '', '2006-12-15 15:11:00', 1, 100, 4, 'Library Catalog (GEAC)', 'Simon Kornblith', '/(?:GeacQUERY|GeacFETCH[\:\?].*[&:]next=html/(?:record\.html|geacnffull\.html))', 'function detectWeb(doc, url) { if(doc.location.href.indexOf("/GeacQUERY") > 0) { return "multiple"; } else { return "book"; } }', 'function doWeb(doc, url) { var uri = doc.location.href; var uris = new Array(); if(uri.indexOf("/GeacQUERY") > 0) { var items = Zotero.Utilities.getItemArray(doc, doc, "(?:Geac)?FETCH[\:\?].*[&:]next=html/(?:record\.html|geacnffull\.html)"); items = Zotero.selectItems(items); if(!items) { return true; } var uris = new Array(); for(var i in items) { var newUri = i.replace(/([:&])next=html\/geacnffull.html/, "$1next=html/marc.html"); newUri = newUri.replace(/([:&])next=html\/record.html/, "$1next=html/marc.html"); uris.push(newUri); } } else { var newUri = uri.replace(/([:&])next=html\/geacnffull.html/, "$1next=html/marc.html"); newUri = newUri.replace(/([:&])next=html\/record.html/, "$1next=html/marc.html"); uris.push(newUri); } var translator = Zotero.loadTranslator("import"); translator.setTranslator("a6ee60df-1ddc-4aae-bb25-45e0537be973"); var marc = translator.getTranslatorObject(); Zotero.Utilities.processDocuments(uris, function(newDoc) { var uri = newDoc.location.href; var namespace = newDoc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var record = new marc.record(); var elmts = newDoc.evaluate(''//pre/text()'', newDoc, nsResolver, XPathResult.ANY_TYPE, null); var elmt, tag, content; var ind = ""; while(elmt = elmts.iterateNext()) { var line = elmt.nodeValue; if(line.substring(0, 6) == " ") { content += " "+line.substring(6); continue; } else { if(tag) { record.addField(tag, ind, content); } } line = line.replace(/[_\t\xA0]/g," "); // nbsp tag = line.substr(0, 3); if(tag[0] != "0" || tag[1] != "0") { ind = line.substr(4, 2); content = line.substr(7).replace(/\$([a-z])(?: |$)/g, marc.subfieldDelimiter+"$1"); } else { if(tag == "000") { tag = undefined; record.leader = "00000"+line.substr(4); } else { content = line.substr(4); } } } var newItem = new Zotero.Item(); record.translate(newItem); var domain = url.match(/https?:\/\/([^/]+)/); newItem.repository = domain[1]+" Library Catalog"; newItem.complete(); }, function() { Zotero.done(); }, null); Zotero.wait(); }'); REPLACE INTO translators VALUES ('0f9fc2fc-306e-5204-1117-25bca009dffc', '1.0.0b3.r1', '', '2006-12-15 15:11:00', 1, 100, 4, 'Library Catalog (TLC/YouSeeMore)', 'Simon Kornblith', 'TLCScripts/interpac\.dll\?(?:.*LabelDisplay.*RecordNumber=[0-9]|Search|ItemTitles)', 'function detectWeb(doc, url) { var detailRe = new RegExp("TLCScripts/interpac\.dll\?.*LabelDisplay.*RecordNumber=[0-9]"); if(detailRe.test(doc.location.href)) { return "book"; } else { return "multiple"; } }', 'function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var detailRe = new RegExp("TLCScripts/interpac\.dll\?.*LabelDisplay.*RecordNumber=[0-9]"); var uri = doc.location.href; var newUris = new Array(); if(detailRe.test(uri)) { newUris.push(uri.replace("LabelDisplay", "MARCDisplay")); } else { var items = Zotero.Utilities.getItemArray(doc, doc, ''TLCScripts/interpac\.dll\?.*LabelDisplay.*RecordNumber=[0-9]''); items = Zotero.selectItems(items); if(!items) { return true; } for(var i in items) { newUris.push(i.replace("LabelDisplay", "MARCDisplay")); } } var translator = Zotero.loadTranslator("import"); translator.setTranslator("a6ee60df-1ddc-4aae-bb25-45e0537be973"); var marc = translator.getTranslatorObject(); Zotero.Utilities.processDocuments(newUris, function(newDoc) { var uri = newDoc.location.href; var namespace = newDoc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var record = new marc.record(); var elmts = newDoc.evaluate(''/html/body/table/tbody/tr[td[4]]'', newDoc, nsResolver, XPathResult.ANY_TYPE, null); var tag, ind, content, elmt; while(elmt = elmts.iterateNext()) { tag = newDoc.evaluate(''./td[2]/tt[1]/text()[1]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().nodeValue; var inds = newDoc.evaluate(''./td[3]/tt[1]/text()[1]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().nodeValue; tag = tag.replace(/[\r\n]/g, ""); inds = inds.replace(/[\r\n\xA0]/g, ""); var children = newDoc.evaluate(''./td[4]/tt[1]//text()'', elmt, nsResolver, XPathResult.ANY_TYPE, null); var subfield = children.iterateNext(); var fieldContent = children.iterateNext(); if(tag == "LDR") { record.leader = "00000"+subfield.nodeValue; } else { content = ""; if(!fieldContent) { content = subfield.nodeValue; } else { while(subfield && fieldContent) { content += marc.subfieldDelimiter+subfield.nodeValue.substr(1, 1)+fieldContent.nodeValue; var subfield = children.iterateNext(); var fieldContent = children.iterateNext(); } } record.addField(tag, inds, content); } } var newItem = new Zotero.Item(); record.translate(newItem); var domain = url.match(/https?:\/\/([^/]+)/); newItem.repository = domain[1]+" Library Catalog"; newItem.complete(); }, function() {Zotero.done(); }, null); Zotero.wait(); }'); REPLACE INTO translators VALUES ('c54d1932-73ce-dfd4-a943-109380e06574', '1.0.0b4.r1', '', '2008-12-22 19:50:00', 1, 100, 4, 'Project MUSE', 'Simon Kornblith', 'https?://[^/]*muse\.jhu\.edu[^/]*/(?:journals/[^/]+/[^/]+/[^/]+\.html|search/results)', 'function detectWeb(doc, url) { var searchRe = new RegExp("^https?://[^/]+/search/results"); if(searchRe.test(url)) { return "multiple"; } else { return "journalArticle"; } }', 'function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var searchRe = new RegExp("^https?://[^/]+/search/results"); if(detectWeb(doc, url) == "multiple") { var items = new Array(); var attachments = new Array(); var pdfRe = /PDF/; var htmlRe = /HTML/; var tableRows = doc.evaluate(''//div[@id="advancedsearch"]/save_form/table//tr'', doc, nsResolver, XPathResult.ANY_TYPE, null); var tableRow; // Go through table rows while(tableRow = tableRows.iterateNext()) { // aid (article id) is what we need to get it all as one file var input = doc.evaluate(''.//input[@name="aid"]'', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); var title = doc.evaluate(''.//div[@class="title"]'', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if(input && input.value && title && title.textContent) { items[input.value] = title.textContent; var aTags = tableRow.getElementsByTagName("a"); // get attachments attachments[input.value] = new Array(); for(var i=0; i<aTags.length; i++) { var linkText = aTags[i].textContent; if(pdfRe.test(linkText)) { attachments[input.value].push({url:aTags[i].href, title:"Project MUSE Full Text PDF", mimeType:"application/pdf"}); } else if(htmlRe.test(linkText)) { attachments[input.value].push({url:aTags[i].href, title:"Project MUSE Snapshot", mimeType:"text/html"}); } } } } items = Zotero.selectItems(items); if(!items) { return true; } var articleString = ""; var newAttachments = new Array(); for(var i in items) { articleString += "&aid="+i; newAttachments.push(attachments[i]); } Zotero.Utilities.HTTP.doGet("http://muse.jhu.edu/search/export.cgi?exporttype=endnote"+articleString, function(text) { // load translator for RIS var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { if(item.notes && item.notes[0]) { item.extra = item.notes[0].note; delete item.notes; item.notes = undefined; } item.attachments = newAttachments.shift(); item.complete(); }); translator.translate(); Zotero.done(); }, function() {}); Zotero.wait(); } else { var hostRe = new RegExp("^(http://[^/]+)/"); var m = hostRe.exec(url); var host = m[1]; var getPDF = doc.evaluate(''//a[text() = "PDF Version"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); var newUrl = url.replace(host, host+"/metadata/zotero"); Zotero.Utilities.HTTP.doGet(newUrl, function(text) { var translator = Zotero.loadTranslator("import"); //set RIS translator translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { if(item.notes && item.notes[0]) { item.extra = item.notes[0].note; delete item.notes; item.notes = undefined; } item.attachments.splice(0); item.attachments.push({document:doc, title:"Project MUSE Snapshot"}); if(getPDF) { item.attachments.push({title:"Project MUSE Full Text PDF", mimeType:"application/pdf", url:getPDF.href}); } item.complete(); }); translator.translate(); }); } }'); REPLACE INTO translators VALUES ('fcf41bed-0cbc-3704-85c7-8062a0068a7a', '1.0.0b3.r1', '', '2009-04-28 09:15:00', 1, 100, 12, 'NCBI PubMed', 'Simon Kornblith and Michael Berkowitz', 'http://[^/]*www\.ncbi\.nlm\.nih\.gov[^/]*/(pubmed|sites/entrez|entrez/query\.fcgi\?.*db=PubMed)', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var uids = doc.evaluate(''//input[@type="checkbox" or @name="uid"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); if(uids.iterateNext() && doc.title.indexOf("PMC Results") == -1) { if (uids.iterateNext() && doc.title.indexOf("PMC Results") == -1){ return "multiple"; } return "journalArticle"; } } function getPMID(co) { var coParts = co.split("&"); for each(part in coParts) { if(part.substr(0, 7) == "rft_id=") { var value = unescape(part.substr(7)); if(value.substr(0, 10) == "info:pmid/") { return value.substr(10); } } } } function detectSearch(item) { if(item.contextObject) { if(getPMID(item.contextObject)) { return "journalArticle"; } } return false; }', 'function lookupPMIDs(ids, doc) { Zotero.wait(); var newUri = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=PubMed&retmode=xml&rettype=citation&id="+ids.join(","); Zotero.Utilities.HTTP.doGet(newUri, function(text) { // Remove xml parse instruction and doctype text = text.replace(/<!DOCTYPE[^>]*>/, "").replace(/<\?xml[^>]*\?>/, ""); var xml = new XML(text); for(var i=0; i<xml.PubmedArticle.length(); i++) { var newItem = new Zotero.Item("journalArticle"); var citation = xml.PubmedArticle[i].MedlineCitation; var PMID = citation.PMID.text().toString(); newItem.url = "http://www.ncbi.nlm.nih.gov/pubmed/" + PMID; newItem.extra = "PMID: "+PMID; // add attachments if(doc) { newItem.attachments.push({document:doc, title:"PubMed Snapshot"}); } else { var url = "http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=pubmed&cmd=Retrieve&dopt=AbstractPlus&list_uids="+PMID; newItem.attachments.push({url:url, title:"PubMed Snapshot", mimeType:"text/html"}); } var article = citation.Article; if(article.ArticleTitle.length()) { var title = article.ArticleTitle.text().toString(); if(title.substr(-1) == ".") { title = title.substring(0, title.length-1); } newItem.title = title; } if (article.Pagination.MedlinePgn.length()){ var fullPageRange = article.Pagination.MedlinePgn.text().toString(); var pageRange = fullPageRange.match(/\d+-\d+/g); for (var j in pageRange) { var pageRangeStart = pageRange[j].match(/^\d+/)[0]; var pageRangeEnd = pageRange[j].match(/\d+$/)[0]; if (pageRangeStart.length > pageRangeEnd.length) { pageRangeEnd = pageRangeStart.substring(0,pageRangeStart.length-pageRangeEnd.length) + pageRangeEnd; fullPageRange = fullPageRange.replace(pageRange[j],pageRangeStart+"-"+pageRangeEnd); } } newItem.pages = fullPageRange; } if(article.Journal.length()) { var issn = article.Journal.ISSN.text().toString(); if(issn) { newItem.ISSN = issn; } if(citation.Article.Journal.ISOAbbreviation.length()) { newItem.journalAbbreviation = Zotero.Utilities.superCleanString(citation.Article.Journal.ISOAbbreviation.text().toString()); } else if(citation.MedlineJournalInfo.MedlineTA.length()) { newItem.journalAbbreviation = Zotero.Utilities.superCleanString(citation.MedlineJournalInfo.MedlineTA.text().toString()); } if(article.Journal.Title.length()) { newItem.publicationTitle = Zotero.Utilities.superCleanString(article.Journal.Title.text().toString()); } else if(newItem.journalAbbreviation.length()) { newItem.publicationTitle = newItem.journalAbbreviation; } if(article.Journal.JournalIssue.length()) { newItem.volume = article.Journal.JournalIssue.Volume.text().toString(); newItem.issue = article.Journal.JournalIssue.Issue.text().toString(); if(article.Journal.JournalIssue.PubDate.length()) { // try to get the date if(article.Journal.JournalIssue.PubDate.Day.text().toString() != "") { newItem.date = article.Journal.JournalIssue.PubDate.Month.text().toString()+" "+article.Journal.JournalIssue.PubDate.Day.text().toString()+", "+article.Journal.JournalIssue.PubDate.Year.text().toString(); } else if(article.Journal.JournalIssue.PubDate.Month.text().toString() != "") { newItem.date = article.Journal.JournalIssue.PubDate.Month.text().toString()+" "+article.Journal.JournalIssue.PubDate.Year.text().toString(); } else if(article.Journal.JournalIssue.PubDate.Year.text().toString() != "") { newItem.date = article.Journal.JournalIssue.PubDate.Year.text().toString(); } else if(article.Journal.JournalIssue.PubDate.MedlineDate.text().toString() != "") { newItem.date = article.Journal.JournalIssue.PubDate.MedlineDate.text().toString(); } } } } if(article.AuthorList.length() && article.AuthorList.Author.length()) { var authors = article.AuthorList.Author; for(var j=0; j<authors.length(); j++) { var lastName = authors[j].LastName.text().toString(); var firstName = authors[j].FirstName.text().toString(); if(firstName == "") { var firstName = authors[j].ForeName.text().toString(); } if(firstName || lastName) { newItem.creators.push({lastName:lastName, firstName:firstName}); } } } if (citation.MeshHeadingList && citation.MeshHeadingList.MeshHeading) { var keywords = citation.MeshHeadingList.MeshHeading; for (var k = 0 ; k < keywords.length() ; k++) { newItem.tags.push(keywords[k].DescriptorName.text().toString()); } } newItem.abstractNote = article.Abstract.AbstractText.toString() newItem.DOI = xml.PubmedArticle[i].PubmedData.ArticleIdList.ArticleId.(@IdType == "doi" ).text().toString(); newItem.publicationTitle = Zotero.Utilities.capitalizeTitle(newItem.publicationTitle); newItem.complete(); } Zotero.done(); }); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var ids = new Array(); var uids = doc.evaluate(''//input[@type="checkbox" or @name="uid"]'', doc, //edited for new PubMed nsResolver, XPathResult.ANY_TYPE, null); var uid = uids.iterateNext(); if(uid) { if (uids.iterateNext()){ var items = new Array(); var tablex = ''//div[@class="rprt"]''; if (!doc.evaluate(tablex, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var tablex = ''//div[@class="ResultSet"]/dl''; var other = true; } var tableRows = doc.evaluate(tablex, doc, nsResolver, XPathResult.ANY_TYPE, null); var tableRow; // Go through table rows while(tableRow = tableRows.iterateNext()) { uid = doc.evaluate(''.//input[@type="checkbox"]'', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if (other) { var article = doc.evaluate(''.//h2'', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); } else { var article = doc.evaluate(''.//p[@class="title"]'', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); } items[uid.value] = article.textContent; } items = Zotero.selectItems(items); if(!items) { return true; } for(var i in items) { ids.push(i); } lookupPMIDs(ids); } else { ids.push(uid.value); lookupPMIDs(ids, doc); } } } function doSearch(item) { // pmid was defined earlier in detectSearch lookupPMIDs([getPMID(item.contextObject)]); }'); REPLACE INTO translators VALUES ('951c027d-74ac-47d4-a107-9c3069ab7b48', '1.0.0b3.r1', '', '2008-03-14 18:00:00', '1', '400', '4', 'Embedded RDF', 'Simon Kornblith', '', 'function detectWeb(doc, url) { if (url.indexOf("reprint") != -1) return false; var metaTags = doc.getElementsByTagName("meta"); for(var i=0; i<metaTags.length; i++) { var tag = metaTags[i].getAttribute("name"); if(tag && tag.substr(0, 3).toLowerCase() == "dc.") { return "webpage"; } } return false; }', 'function doWeb(doc, url) { var dc = "http://purl.org/dc/elements/1.1/"; // load RDF translator, so that we don''t need to replicate import code var translator = Zotero.loadTranslator("import"); translator.setTranslator("5e3ad958-ac79-463d-812b-a86a9235c28f"); translator.setHandler("itemDone", function(obj, newItem) { // use document title if none given in dublin core if(!newItem.title) { newItem.title = doc.title; } // add attachment newItem.attachments.push({document:doc}); // add url newItem.url = doc.location.href; newItem.repository = false; newItem.complete(); }); var rdf = translator.getTranslatorObject(); var metaTags = doc.getElementsByTagName("meta"); var foundTitle = false; // We can use the page title if necessary for(var i=0; i<metaTags.length; i++) { var tag = metaTags[i].getAttribute("name"); var value = metaTags[i].getAttribute("content"); if(tag && value && tag.substr(0, 3).toLowerCase() == "dc.") { if(tag == "dc.title") { foundTitle = true; } rdf.Zotero.RDF.addStatement(url, dc + tag.substr(3).toLowerCase(), value, true); } else if(tag && value && (tag == "author" || tag == "author-personal")) { rdf.Zotero.RDF.addStatement(url, dc + "creator", value, true); } else if(tag && value && tag == "author-corporate") { rdf.Zotero.RDF.addStatement(url, dc + "creator", value, true); } } rdf.defaultUnknownType = "webpage"; rdf.doImport(); }'); REPLACE INTO translators VALUES ('05d07af9-105a-4572-99f6-a8e231c0daef', '1.0.0b3.r1', '', '2007-09-15 20:08:46', 1, 300, 4, 'COinS', 'Simon Kornblith', NULL, 'function detectWeb(doc, url) { var spanTags = doc.getElementsByTagName("span"); var encounteredType = false; for(var i=0; i<spanTags.length; i++) { var spanClass = spanTags[i].getAttribute("class"); if(spanClass) { var spanClasses = spanClass.split(" "); if(Zotero.Utilities.inArray("Z3988", spanClasses)) { var spanTitle = spanTags[i].getAttribute("title"); // determine if it''s a valid type var item = new Zotero.Item; var success = Zotero.Utilities.parseContextObject(spanTitle, item); if(item.itemType) { if(encounteredType) { return "multiple"; } else { encounteredType = item.itemType; } } } } } return encounteredType; }', '// used to retrieve next COinS object when asynchronously parsing COinS objects // on a page function retrieveNextCOinS(needFullItems, newItems, couldUseFullItems, doc) { if(needFullItems.length) { var item = needFullItems.shift(); Zotero.debug("looking up contextObject"); var search = Zotero.loadTranslator("search"); search.setHandler("itemDone", function(obj, item) { newItems.push(item); }); search.setHandler("done", function() { retrieveNextCOinS(needFullItems, newItems, couldUseFullItems, doc); }); search.setSearch(item); // look for translators var translators = search.getTranslators(); if(translators.length) { search.setTranslator(translators); search.translate(); } else { retrieveNextCOinS(needFullItems, newItems, couldUseFullItems, doc); } } else { completeCOinS(newItems, couldUseFullItems, doc); Zotero.done(); } } // saves all COinS objects function completeCOinS(newItems, couldUseFullItems, doc) { if(newItems.length > 1) { var selectArray = new Array(); for(var i in newItems) { selectArray[i] = newItems[i].title; } selectArray = Zotero.selectItems(selectArray); var useIndices = new Array(); for(var i in selectArray) { useIndices.push(i); } completeItems(newItems, useIndices, couldUseFullItems); } else if(newItems.length) { completeItems(newItems, [0], couldUseFullItems); } } function completeItems(newItems, useIndices, couldUseFullItems, doc) { if(!useIndices.length) { return; } var i = useIndices.shift(); // grab full item if the COinS was missing an author if(couldUseFullItems[i]) { Zotero.debug("looking up contextObject"); var search = Zotero.loadTranslator("search"); var firstItem = false; search.setHandler("itemDone", function(obj, newItem) { if(!firstItem) { // add doc as attachment newItem.attachments.push({document:doc}); newItem.complete(); firstItem = true; } }); search.setHandler("done", function(obj) { // if we didn''t find anything, use what we had before (even if it // lacks the creator) if(!firstItem) { newItems[i].complete(); } // call next completeItems(newItems, useIndices, couldUseFullItems); }); search.setSearch(newItems[i]); var translators = search.getTranslators(); if(translators.length) { search.setTranslator(translators); search.translate(); } else { // add doc as attachment newItems[i].attachments.push({document:doc}); newItems[i].complete(); // call next completeItems(newItems, useIndices, couldUseFullItems); } } else { // add doc as attachment newItems[i].attachments.push({document:doc}); newItems[i].complete(); // call next completeItems(newItems, useIndices, couldUseFullItems); } } function doWeb(doc, url) { var newItems = new Array(); var needFullItems = new Array(); var couldUseFullItems = new Array(); var spanTags = doc.getElementsByTagName("span"); for(var i=0; i<spanTags.length; i++) { var spanClass = spanTags[i].getAttribute("class"); if(spanClass) { var spanClasses = spanClass.split(" "); if(Zotero.Utilities.inArray("Z3988", spanClasses)) { var spanTitle = spanTags[i].getAttribute("title"); var newItem = new Zotero.Item(); newItem.repository = false; // do not save repository if(Zotero.Utilities.parseContextObject(spanTitle, newItem)) { if(newItem.title) { if(!newItem.creators.length) { // if we have a title but little other identifying // information, say we''ll get full item later newItem.contextObject = spanTitle; couldUseFullItems[newItems.length] = true; } // title and creators are minimum data to avoid looking up newItems.push(newItem); } else { // retrieve full item newItem.contextObject = spanTitle; needFullItems.push(newItem); } } } } } Zotero.debug(needFullItems); if(needFullItems.length) { // retrieve full items asynchronously Zotero.wait(); retrieveNextCOinS(needFullItems, newItems, couldUseFullItems, doc); } else { completeCOinS(newItems, couldUseFullItems, doc); } }'); REPLACE INTO translators VALUES ('e7e01cac-1e37-4da6-b078-a0e8343b0e98', '1.0.0b4.r1', '', '2007-08-04 23:15:00', '1', '200', '4', 'unAPI', 'Simon Kornblith', '', 'var RECOGNIZABLE_FORMATS = ["mods", "marc", "endnote", "ris", "bibtex", "rdf"]; var FORMAT_GUIDS = { "mods":"0e2235e7-babf-413c-9acf-f27cce5f059c", "marc":"a6ee60df-1ddc-4aae-bb25-45e0537be973", "endnote":"881f60f2-0802-411a-9228-ce5f47b64c7d", "ris":"32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7", "bibtex":"9cb70025-a888-4a29-a210-93ec52da40d4", "rdf":"5e3ad958-ac79-463d-812b-a86a9235c28f" }; var unAPIResolver, unsearchedIds, foundIds, foundItems, foundFormat, foundFormatName; function detectWeb(doc, url) { // initialize variables unsearchedIds = []; foundIds = []; foundItems = []; foundFormat = []; foundFormatName = []; var nsResolver = doc.createNSResolver(doc.documentElement); // look for a resolver unAPIResolver = doc.evaluate(''//link[@rel="unapi-server"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if(!unAPIResolver) return false; unAPIResolver = unAPIResolver.getAttribute("href"); // look for abbrs var abbrs = doc.getElementsByTagName("abbr"); for each(var abbr in abbrs) { if(abbr.getAttribute && abbr.getAttribute("class") && abbr.getAttribute("class").split(" ").indexOf("unapi-id") != -1 && abbr.getAttribute("title")) { // found an abbr unsearchedIds.push(escape(abbr.getAttribute("title"))); } } if(!unsearchedIds.length) return false; // now we need to see if the server actually gives us bibliographic metadata. // one way to signal this is with a META tag var zoteroMeta = doc.evaluate(''//meta[@name="ZoteroItemType"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if(zoteroMeta) return zoteroMeta.getAttribute("content"); // otherwise, things will be a bit more complicated, and we''ll have to do some HTTP requests Zotero.wait(); if(unsearchedIds.length == 1) { // if there''s only one abbr tag, we should go ahead and retrieve types for it getItemType(); } else { // if there''s more than one, we should first see if the resolver gives metadata for all of them Zotero.Utilities.HTTP.doGet(unAPIResolver, function(text) { var format = checkFormats(text); if(format) { // move unsearchedIds to foundIds foundIds = unsearchedIds; unsearchedIds = []; // save format and formatName foundFormat = format[0]; foundFormatName = format[1]; Zotero.done("multiple"); } else { getItemType(); } }); } } function getItemType() { // if there are no items left to search, use the only item''s type (if there is one) or give up if(!unsearchedIds.length) { if(foundIds.length) { getOnlyItem(); } else { Zotero.done(false); } return; } var id = unsearchedIds.shift(); Zotero.Utilities.HTTP.doGet(unAPIResolver+"?id="+id, function(text) { var format = checkFormats(text); if(format) { // save data foundIds.push(id); foundFormat.push(format[0]); foundFormatName.push(format[1]); if(foundIds.length == 2) { // this is our second; use multiple Zotero.done("multiple"); return; } } // keep going getItemType(); }); } function checkFormats(text) { text = text.replace(/<!DOCTYPE[^>]*>/, "").replace(/<\?xml[^>]*\?>/, ""); var xml = new XML(text); var foundFormat = new Object(); // this is such an ugly, disgusting hack, and I hate how Mozilla decided to neuter an ECMA standard for each(var format in xml.format) { var name = format.@name.toString(); var lowerName = name.toLowerCase(); if(format.@namespace_uri == "http://www.loc.gov/mods/v3" || lowerName == "mods" || format.@docs == "http://www.loc.gov/standards/mods/") { if(!foundFormat["mods"] || lowerName.indexOf("full") != -1) { foundFormat["mods"] = escape(name); } } else if(lowerName.match(/^marc\b/)) { if(!foundFormat["marc"] || lowerName.indexOf("utf8") != -1) { foundFormat["marc"] = escape(name); } } else if(lowerName == "rdf_dc") { foundFormat["rdf"] = escape(name); } else if(format.@docs.text() == "http://www.refman.com/support/risformat_intro.asp" || lowerName.match(/^ris\b/)) { if(!foundFormat["ris"] || lowerName.indexOf("utf8") != -1) { foundFormat["ris"] = escape(name); } } else if(lowerName == "bibtex") { foundFormat["bibtex"] = escape(name); } else if(lowerName == "endnote") { foundFormat["endnote"] = escape(name); } } // loop through again, this time respecting preferences for each(var format in RECOGNIZABLE_FORMATS) { if(foundFormat[format]) return [format, foundFormat[format]]; } return false; } function getOnlyItem() { // retrieve the only item retrieveItem(foundIds[0], foundFormat[0], foundFormatName[0], function(obj, item) { foundItems.push(item); Zotero.done(item.itemType); }); } function retrieveItem(id, format, formatName, callback) { // retrieve URL Zotero.Utilities.HTTP.doGet(unAPIResolver+"?id="+id+"&format="+formatName, function(text) { var translator = Zotero.loadTranslator("import"); translator.setTranslator(FORMAT_GUIDS[format]); translator.setString(text); translator.setHandler("itemDone", callback); translator.translate(); }); }', '/** * Get formats and names for all usable ids; when done, get all items **/ function getAllIds() { if(!unsearchedIds.length) { // once all ids have been gotten, get all items getAllItems(); return; } var id = unsearchedIds.shift(); Zotero.Utilities.HTTP.doGet(unAPIResolver+"?id="+id, function(text) { var format = checkFormats(text); if(format) { // save data foundIds.push(id); foundFormat.push(format[0]); foundFormatName.push(format[1]); } // keep going getAllIds(); }); } /** * Get all items; when done, show selectItems or scrape **/ function getAllItems() { if(foundItems.length == foundIds.length) { if(foundItems.length == 1) { // if only one item, send complete() foundItems[0].complete(); } else if(foundItems.length > 0) { // if multiple items, show selectItems var itemTitles = []; for(var i in foundItems) { itemTitles[i] = foundItems[i].title; } var chosenItems = Zotero.selectItems(itemTitles); if(!chosenItems) Zotero.done(true); for(var i in chosenItems) { foundItems[i].complete(); } } // reset items foundItems = []; Zotero.done(); return; } var id = foundIds[foundItems.length]; // foundFormat can be either a string or an array if(typeof(foundFormat) == "string") { var format = foundFormat; var formatName = foundFormatName; } else { var format = foundFormat[foundItems.length]; var formatName = foundFormatName[foundItems.length]; } // get item retrieveItem(id, format, formatName, function(obj, item) { foundItems.push(item); getAllItems(); }); } function doWeb() { Zotero.wait(); // retrieve data for all ids getAllIds(); }'); REPLACE INTO translators VALUES ('a326fc49-60c2-405b-8f44-607e5d18b9ad', '1.0.0b4.r5', '', '2008-01-25 20:00:00', '0', '100', '4', 'Code4Lib Journal', 'Michael Berkowitz', 'http://journal.code4lib.org/', 'function detectWeb(doc, url) { if (doc.evaluate(''//h2[@class="articletitle"]/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } else if (doc.evaluate(''//h1[@class="articletitle"]/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "journalArticle"; } }', 'function doWeb(doc, url) { var items = new Object(); var articles = new Array(); var xpath = ''//div[@class="article"]/h2[@class="articletitle"]/a''; if (detectWeb(doc, url) == "multiple") { var xpath = ''//div[@class="article"]/h2[@class="articletitle"]/a''; var titles = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null); var next_title = titles.iterateNext(); while (next_title) { items[next_title.href] = next_title.textContent; next_title = titles.iterateNext(); } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles.push(url); } Zotero.Utilities.processDocuments(articles, function(newDoc, url) { var newItem = new Zotero.Item("journalArticle"); newItem.repository = "Code4Lib Journal"; newItem.publicationTitle = "The Code4Lib Journal"; newItem.ISSN = "1940-5758"; newItem.url = newDoc.location.href; newItem.title = newDoc.evaluate(''//div[@class="article"]/h1[@class="articletitle"]/a'', newDoc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent; newItem.abstractNote = newDoc.evaluate(''//div[@class="article"]/div[@class="abstract"]/p'', newDoc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent; var issdate = newDoc.evaluate(''//p[@id="issueDesignation"]'', newDoc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent; newItem.issue = issdate.match(/([^,]*)/)[0].match(/\d+/)[0]; newItem.date = issdate.match(/,\s+(.*)$/)[1]; var axpath = ''//div[@class="article"]/div[@class="entry"]/p[1]/a''; var authors = newDoc.evaluate(axpath, newDoc, null, XPathResult.ANY_TYPE, null); var next_author = authors.iterateNext(); while (next_author) { newItem.creators.push(Zotero.Utilities.cleanAuthor(next_author.textContent, "author")); next_author = authors.iterateNext(); } newItem.attachments.push({url:newDoc.location.href, title:"Code4Lib Journal Snapshot", mimeType:"text/html"}); newItem.complete(); }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('c3edb423-f267-47a1-a8c2-158c247f87c2', '1.0.0b4.r5', '', '2008-11-06 04:25:00', '0', '100', '4', 'Common-Place', 'Frederick Gibbs', 'http://www.common-place\.|historycooperative\.org/journals/cp', 'function detectWeb(doc, url) { if(doc.title.indexOf("Previous Issues") != -1 || doc.title.indexOf("Search Site") != -1 ) { return "multiple"; } else { return "journalArticle"; } }', 'function scrape(doc) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var newItem = new Zotero.Item("journalArticle"); newItem.publicationTitle = "Common-Place"; newItem.url = doc.location.href; //get issue year and month //these will determine what xpaths we use for title and author var pubDate; var dateRe = /<a href="\/vol-[0-9]{2}\/no-[0-9]{2}\/">(.*)<\/a><\/b>/; var m = dateRe.exec(Zotero.Utilities.trimInternal(doc.getElementsByTagName("body")[0].innerHTML)); if(m) { //newItem.title = Zotero.Utilities.trimInternal(Zotero.Utilities.unescapeHTML(m[1])); pubDate = m[1]; } else { pubDate = doc.evaluate(''//div[@id="container"]/div[@id="top"]/p/b/a[2]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; } var d; //Zotero.debug(pubDate); pubDateVolRE = /vol. (.*) ┬╖ no. /; d = pubDateVolRE.exec(pubDate); newItem.volume = d[1]; pubDateVolRE = /no. (.*) ┬╖/; d = pubDateVolRE.exec(pubDate); newItem.issue = d[1]; pubDateVolRE = /no. [0-9] ┬╖ (.*)/; d = pubDateVolRE.exec(pubDate); newItem.date = d[1]; //usually the page begins with the article title or book title (of reviewed book) //some pages have an image just before them, so we need to skip it if it''s there. var pLevel; var m=doc.evaluate(''//div[@id="content"]/p[1]/img'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); //if there is an image here, offset the xpath if (m == null) { pLevel = ''//div[@id="content"]/p[1]''; } else { pLevel = ''//div[@id="content"]/p[2]''; } //issues before 2004 have a table based layout, so a totally different xpath. //check to see if we have anything, then try again if we don''t. var author; var title; author = doc.evaluate(pLevel+''/span[1]'', doc, nsResolver, XPathResult.ANY_TYPE, null); author = author.iterateNext(); if (author != null) { //Zotero.debug("au"+author+"au"); var title = doc.evaluate(pLevel+''/span[2]'', doc, nsResolver, XPathResult.ANY_TYPE, null); //Zotero.debug("ti"+title+"ti"); title = title.iterateNext().textContent; //determine if we have a book review // if so, get the publication information if (author.textContent.indexOf("Review by") != -1 ) { newItem.title = String.concat("Review of ", title); newItem.author = author.textContent.substring(10); } else { newItem.author = author.textContent; newItem.title = title; } } else { //we have older issue //check if we are on a review var review = doc.evaluate(''/html/body/table/tbody/tr/td[2]/p[2]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); var temp = review.textContent; if (temp.indexOf("Review") != -1) { title = doc.evaluate(''/html/body/table/tbody/tr/td[2]/p/i'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; title = "Review of " + title; author = review.textContent.substring(10); } else { //for articles title = doc.evaluate(''/html/body/table/tbody/tr/td[2]/p/b'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; author = doc.evaluate(''/html/body/table/tbody/tr/td[2]/p[1]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent.split(/\n/)[1]; //Zotero.debug(author); } newItem.author = author; newItem.title = title; } newItem.attachments.push({document:doc, title:doc.title}); newItem.complete(); } function doWeb(doc, url) { var type = detectWeb(doc, url); if (type == "multiple") { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; //create list of items //what about home page (current issue table of contents?) //for search result links: /html/body/table[2]/tbody/tr/td[2]/li[3]/a //for previous issues: //tr/td/p/a/b (but we need to strip out volume links (starts with ''Volume'') var link; var title; var items = new Object(); var searchLinks = doc.evaluate(''/html/body/table[2]/tbody/tr/td[2]/li/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); while (elmt = searchLinks.iterateNext()) { Zotero.debug(elmt.textContent); title = elmt.textContent; link = elmt.href; if (title && link){ items[link] = title; } } items = Zotero.selectItems(items); if(!items) { return true; } var uris = new Array(); for(var i in items) { uris.push(i); } Zotero.Utilities.processDocuments(uris, function(doc) { scrape(doc) }, function() { Zotero.done(); }, null); Zotero.wait(); } else { scrape(doc); } }'); REPLACE INTO translators VALUES ('dede653d-d1f8-411e-911c-44a0219bbdad', '1.0.0b4.r1', '', '2007-06-18 18:15:00', '0', '100', '4', 'GPO Access e-CFR', 'Bill McKinney', '^http://ecfr\.gpoaccess\.gov/cgi/t/text/text-idx.+', 'function detectWeb(doc, url) { var re = new RegExp("^http://ecfr\.gpoaccess\.gov/cgi/t/text/text-idx"); if(re.test(doc.location.href)) { return "book"; } else { return "multiple"; } }', 'function get_nextsibling(n) { var x=n.nextSibling; while (x.nodeType!=1) { x=x.nextSibling; } return x; } function scrape(doc) { var newItem = new Zotero.Item("statute"); newItem.url = doc.location.href; var extraText = new String(); var tmpSection = ""; newItem.code = "Electronic Code of Federal Regulations"; newItem.language = "en-us"; var spanTags = doc.getElementsByTagName("span"); for(var i=0; i<spanTags.length; i++) { if (spanTags[i].className == "mainheader") { var tmpStr = spanTags[i].innerHTML; tmpStr = tmpStr.replace(/\ /g, " "); tmpStr = tmpStr.replace(/\&\#167;/g, "Sec."); newItem.codeNumber = tmpStr; newItem.title = "e-CFR: " + tmpStr; } if (spanTags[i].className == "div5head") { var tmpStr = spanTags[i].childNodes[0].innerHTML; tmpStr = tmpStr.replace(/\ /g, " "); tmpStr = tmpStr.replace(/\&\#167;/g, "Sec."); tmpSection = tmpStr; } } var heading5Tags = doc.getElementsByTagName("h5"); for(var i=0; i<heading5Tags.length; i++) { var tmpStr = heading5Tags[0].innerHTML; tmpStr = tmpStr.replace(/\ /g, " "); tmpStr = tmpStr.replace(/\&\#167;/g, "Sec."); if (tmpSection != "") { tmpSection = tmpSection + " - "; } newItem.section = tmpSection + tmpStr; break; } // statutory source var boldTags = doc.getElementsByTagName("b"); for(var i=0; i<boldTags.length; i++) { var s = new String(boldTags[i].innerHTML); if (s.indexOf("Source:") > -1) { newItem.history = "Source: " + boldTags[i].nextSibling.nodeValue; } if (s.indexOf("Authority:") > -1) { newItem.extra = "Authority: " + boldTags[i].nextSibling.nodeValue; } } newItem.complete(); } function doWeb(doc, url) { var re = new RegExp("http://ecfr\.gpoaccess\.gov/cgi/t/text/text-idx.+"); if(re.test(doc.location.href)) { scrape(doc); } else { var items = Zotero.Utilities.getItemArray(doc, doc,"http://ecfr\.gpoaccess\.gov/cgi/t/text/text-idx.+"); items = Zotero.selectItems(items); if(!items) { return true; } var uris = new Array(); for(var i in items) { uris.push(i); } Zotero.Utilities.processDocuments(uris, function(doc) { scrape(doc) }, function() { Zotero.done(); }, null); Zotero.wait(); } }'); REPLACE INTO translators VALUES ('5ed5ab01-899f-4a3b-a74c-290fb2a1c9a4', '1.0.0b4.r1', '', '2007-06-18 18:15:00', '0', '100', '4', 'AustLII and NZLII', 'Bill McKinney', 'http:\/\/www\.(?:austlii\.edu\.au|nzlii\.org)\/(?:\/cgi-bin\/disp\.pl\/)?(?:au|nz)\/cases\/.+', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var austliiRegexp = /^http:\/\/www\.(?:austlii\.edu\.au|nzlii\.org)\/(?:\/cgi-bin\/disp\.pl\/)?(?:au|nz)\/cases\/.+/ if(austliiRegexp.test(url)) { return "book"; } else { var aTags = doc.getElementsByTagName("a"); for(var i=0; i<aTags.length; i++) { if(articleRegexp.test(aTags[i].href)) { return "multiple"; } } } } ', 'function scrape(doc) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var newItem = new Zotero.Item("case"); newItem.title = doc.title; newItem.url = doc.location.href; var titleRegexp = /^(.+)\s+\[(\d+)\]\s+(\w+)\s(\d+)\s+\((\d+)\s+(\w+)\s+(\d+)\)/ var titleMatch = titleRegexp .exec(doc.title); if (titleMatch ) { newItem.caseName = titleMatch[1] + " [" + titleMatch[2] + "] " + titleMatch[3] + " " + titleMatch[4]; newItem.dateDecided = titleMatch[7] + " " + titleMatch[6] + " " + titleMatch[5]; newItem.court = titleMatch[3]; } else { newItem.caseName = doc.title; newItem.dateDecided = "not found"; } newItem.complete(); } function doWeb(doc, url) { var austliiRegexp = /^http:\/\/www\.(?:austlii\.edu\.au|nzlii\.org)\/(?:\/cgi-bin\/disp\.pl\/)?(?:au|nz)\/cases\/.+/ if(austliiRegexp.test(url)) { scrape(doc); } else { var items = Zotero.Utilities.getItemArray(doc, doc, austliiRegexp); items = Zotero.selectItems(items); if(!items) { return true; } var urls = new Array(); for(var i in items) { urls.push(i); } Zotero.Utilities.processDocuments(urls, scrape, function() { Zotero.done(); }); Zotero.wait(); } }'); REPLACE INTO translators VALUES ('5ae63913-669a-4792-9f45-e089a37de9ab', '1.0.0b4.r1', '', '2007-06-18 18:15:00', '0', '100', '4', 'BAILII', 'Bill McKinney', 'http:\/\/www\.bailii\.org(?:\/cgi\-bin\/markup\.cgi\?doc\=)?\/\w+\/cases\/.+', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var liiRegexp= /^http:\/\/www\.bailii\.org(?:\/cgi\-bin\/markup\.cgi\?doc\=)?\/\w+\/cases\/.+/ if(liiRegexp.test(url)) { return "book"; } else { var aTags = doc.getElementsByTagName("a"); for(var i=0; i<aTags.length; i++) { if(articleRegexp.test(aTags[i].href)) { return "multiple"; } } } }', 'function scrape(doc) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var newItem = new Zotero.Item("case"); newItem.title = doc.title; newItem.url = doc.location.href; var titleRegexp = /^(.+)\s+\[(\d+)\]\s+(.+)\s+\((\d+)\s+(\w+)\s+(\d+)\)/ var titleMatch = titleRegexp .exec(doc.title); if (titleMatch ) { newItem.caseName = titleMatch[1] + " [" + titleMatch[2] + "] " + titleMatch[3]; newItem.dateDecided = titleMatch[4] + " " + titleMatch[5] + " " + titleMatch[6]; } else { newItem.caseName = doc.title; newItem.dateDecided = "not found"; } var courtRegexp = /cases\/([^\/]+)\/([^\/]+)\// var courtMatch = courtRegexp.exec(doc.location.href); if (courtMatch) { var divRegexp = /\w+/ var divMatch = divRegexp.exec(courtMatch[2]); if (divMatch) { newItem.court = courtMatch[1] + " (" + courtMatch[2] + ")"; } else { newItem.court = courtMatch[1]; } } else { newItem.court = "not found"; } // judge var panel = doc.getElementsByTagName("PANEL"); if (panel.length > 0) { var tmp = panel[0].innerHTML; newItem.creators.push({lastName:tmp, creatorType:"judge", fieldMode:true}); } // citation var cite = doc.getElementsByTagName("CITATION"); if (cite.length > 0) { var tmpc = cite[0].childNodes[0].innerHTML; newItem.notes.push({note:tmpc}); } newItem.complete(); } function doWeb(doc, url) { var liiRegexp= /http:\/\/www\.bailii\.org(?:\/cgi\-bin\/markup\.cgi\?doc\=)?\/\w+\/cases\/.+/ if(liiRegexp.test(url)) { scrape(doc); } else { var items = Zotero.Utilities.getItemArray(doc, doc, liiRegexp); items = Zotero.selectItems(items); if(!items) { return true; } var urls = new Array(); for(var i in items) { urls.push(i); } Zotero.Utilities.processDocuments(urls, scrape, function() { Zotero.done(); }); Zotero.wait(); } }'); REPLACE INTO translators VALUES ('84799379-7bc5-4e55-9817-baf297d129fe', '1.0.0b4.r1', '', '2007-06-18 18:15:00', '0', '100', '4', 'CanLII', 'Bill McKinney', 'http:\/\/www\.canlii\.org\/en\/[^\/]+\/[^\/]+\/doc\/.+', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var canLiiRegexp = /http:\/\/www\.canlii\.org\/en\/[^\/]+\/[^\/]+\/doc\/.+/ if(canLiiRegexp .test(url)) { return "book"; } else { var aTags = doc.getElementsByTagName("a"); for(var i=0; i<aTags.length; i++) { if(articleRegexp.test(aTags[i].href)) { return "multiple"; } } } } ', 'function associateMeta(newItem, metaTags, field, zoteroField) { var field = metaTags.namedItem(field); if(field) { newItem[zoteroField] = field.getAttribute("content"); } } function scrape(doc) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var newItem = new Zotero.Item("case"); var metaTags = doc.getElementsByTagName("meta"); associateMeta(newItem, metaTags, "DC.Title", "title"); associateMeta(newItem, metaTags, "DC.Date", "dateDecided"); associateMeta(newItem, metaTags, "DC.Language", "language"); newItem.url = doc.location.href; var field = metaTags.namedItem("DC.Title"); var tmpText = ""; if(field) { tmpText = field.getAttribute("content"); var capRe = /^(.+),\s+(\d{4})\s+(\w+)\s+(\d+)\s+\(([^\)]+)\)/; var m = capRe.exec(tmpText); if(m) { newItem.caseName = m[1]+", "+m[2]+" "+m[3]+" "+m[4]; if (m[3] == ''CanLII'') { newItem.court = m[5]; } else { newItem.court = m[3]; } } else { newItem.caseName = tmpText; newItem.court = "not found"; } } // attach link to pdf version // NOTE: not working - don''t know why var pdfRe = /^(.+)\.html$/; var pdfMatch = pdfRe.exec(doc.location.href); if (pdfMatch) { var pdfUrl = pdfMatch[1]+".pdf"; newItem.attachments = [{url:pdfUrl, title:"PDF version", mimeType:"application/pdf"}]; } newItem.complete(); } function doWeb(doc, url) { var canLiiRegexp= /http:\/\/www\.canlii\.org\/en\/[^\/]+\/[^\/]+\/doc\/.+/ if(canLiiRegexp.test(url)) { scrape(doc); } else { var items = Zotero.Utilities.getItemArray(doc, doc, canLiiRegexp); items = Zotero.selectItems(items); if(!items) { return true; } var urls = new Array(); for(var i in items) { urls.push(i); } Zotero.Utilities.processDocuments(urls, scrape, function() { Zotero.done(); }); Zotero.wait(); } }'); REPLACE INTO translators VALUES ('930d49bc-44a1-4c22-9dde-aa6f72fb11e5', '1.0.0b4.r1', '', '2007-06-18 18:15:00', '0', '100', '4', 'Cornell LII', 'Bill McKinney', '^http://www\.law\.cornell\.edu/supct/html/.+', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var liiRegexp = /http:\/\/www\.law\.cornell\.edu\/supct\/html\/.+/ if(liiRegexp.test(url)) { return "book"; } else { var aTags = doc.getElementsByTagName("a"); for(var i=0; i<aTags.length; i++) { if(articleRegexp.test(aTags[i].href)) { return "multiple"; } } } }', 'function associateMeta(newItem, metaTags, field, zoteroField) { var field = metaTags.namedItem(field); if(field) { newItem[zoteroField] = field.getAttribute("content"); } } function scrape(doc) { var caselawCourt = "U.S. Supreme Court"; var caselawJurisdiction = "Federal"; var caselawSourceReporter = "U.S."; var caselawSourceVolume = "___"; var caselawSourceStartPage = "___"; var caselawParallelSourceVolume = "___"; var caselawParallelSourceStartPage = "___"; var caselawParallelSourceReporter = "___"; var caselawDecisionYear = ""; var newItem = new Zotero.Item("case"); newItem.url = doc.location.href; newItem.language = "en-us"; newItem.court = "U.S. Supreme Court"; newItem.reporter = "U.S."; // LII provides a bunch of meta tags to harvest var metaTags = doc.getElementsByTagName("meta"); associateMeta(newItem, metaTags, "CASENAME", "title"); associateMeta(newItem, metaTags, "CASENAME", "caseName"); //associateMeta(newItem, metaTags, "DOCKET", "caselawDocket"); //associateMeta(newItem, metaTags, "PARTY1", "caselawParty1"); //associateMeta(newItem, metaTags, "PARTY2", "caselawParty2"); //associateMeta(newItem, metaTags, "ARGDATE", "caselawArguedDate"); //associateMeta(newItem, metaTags, "DECDATE", "dateDecided"); associateMeta(newItem, metaTags, "COURTBELOW", "history"); //associateMeta(newItem, metaTags, "ACTION", "caselawCourtAction"); var tmpCasename = newItem.caseName; tmpCasename = Zotero.Utilities.capitalizeTitle(tmpCasename.toLowerCase()); tmpCasename = tmpCasename.replace("V.", "v."); newItem.caseName = tmpCasename; newItem.shortTitle = tmpCasename; // judge var j = metaTags.namedItem("AUTHOR"); if(j) { newItem.creators.push({lastName:j.getAttribute("content"), creatorType:"judge", fieldMode:true}); } // group meta tags for(var i=0; i<metaTags.length; i++) { var key = metaTags[i].getAttribute("name"); var value = metaTags[i].getAttribute("content"); if (key == "GROUP") { newItem.tags.push(value); } } // parse year out of decision date var decdateField = metaTags.namedItem("DECDATE"); if(decdateField ) { var decisionYearRegex = /(\w+)\s+(\d+),\s+(\d+)/ var decisionDateMatch = decisionYearRegex.exec(decdateField.getAttribute("content")); var dy; var dm; var dd; if (decisionDateMatch ) { dm = decisionDateMatch[1]; dd = decisionDateMatch[2]; dy = decisionDateMatch [3]; caselawDecisionYear = dy; newItem.dateDecided = dy + " " + dm + " " + dd; } } // create attachment to pdf var dyRegex = /^(.+)\/html\/(.+)(\.Z\w+)\.html$/; var dyMatch = dyRegex.exec(newItem.url); if (dyMatch) { var pdfUrl = dyMatch[1]+"/pdf/"+dyMatch[2]+"P"+dyMatch[3]; newItem.attachments.push({url:pdfUrl, title:"PDF version", mimeType:"application/pdf", downloadable:true}); } // parse disposition var dis = doc.getElementsByTagName("DISPOSITION"); if (dis.length > 0) { var tmpDis = dis[0].innerHTML; tmpDis = tmpDis.replace(/\s+/g, " "); newItem.title = newItem.title + " (" + tmpDis + ")"; newItem.caseName= newItem.caseName + " (" + tmpDis + ")"; } // parse citation into parts so that bluebook can be constructed var cite = doc.getElementsByTagName("CASENUMBER"); if (cite.length > 0) { var citeRegex = /([0-9]+)\s+U\.S\.\s+([0-9]+)/; var citeMatch = citeRegex.exec(cite[0].innerHTML); if (citeMatch) { caselawSourceVolume = citeMatch[1]; newItem.reporterVolume = citeMatch[1]; caselawSourceStartPage = citeMatch[2]; newItem.firstPage = citeMatch[2]; } } // look for offcite span element var spanTags = doc.getElementsByTagName("span"); if (spanTags.length > 0) { for(var i=0; i<spanTags.length; i++) { if(spanTags[i].className == "offcite") { var citeRegex = /([0-9]+)\s+U\.S\.\s+([0-9]+)/; var citeMatch = citeRegex.exec(spanTags[i].innerHTML); if (citeMatch) { caselawSourceVolume = citeMatch[1]; newItem.reporterVolume = citeMatch[1]; caselawSourceStartPage = citeMatch[2]; newItem.firstPage = citeMatch[2]; } break; } } } // bluebook citation var bbCite = newItem.shortTitle + ", " + caselawSourceVolume + " " + caselawSourceReporter + " " + caselawSourceStartPage; // paralell cite if (caselawParallelSourceVolume != "___") { bbCite = bbCite + ", " + caselawParallelSourceVolume + " " + caselawParallelSourceReporter + " " + caselawParallelSourceStartPage; } // jurisdiction and year bbCite = bbCite + " (" + caselawDecisionYear + ")"; // closing period bbCite = "Bluebook citation: " + bbCite + "."; newItem.notes.push({note:bbCite}); // parse out publication notice var notice = doc.getElementsByTagName("NOTICE"); if (notice .length > 0) { var tmpNotice= notice [0].innerHTML; tmpNotice= tmpNotice.replace(/\s+/g, " "); newItem.notes.push({note:tmpNotice}); } newItem.complete(); } function doWeb(doc, url) { var liiRegexp = /http:\/\/www\.law\.cornell\.edu\/supct\/html\/.+/ if(liiRegexp.test(url)) { scrape(doc); } else { var items = Zotero.Utilities.getItemArray(doc, doc, liiRegexp); items = Zotero.selectItems(items); if(!items) { return true; } var urls = new Array(); for(var i in items) { urls.push(i); } Zotero.Utilities.processDocuments(urls, scrape, function() { Zotero.done(); }); Zotero.wait(); } }'); REPLACE INTO translators VALUES ('232e24fe-2f68-44fc-9366-ecd45720ee9e', '1.0.0b4.r1', '', '2007-06-21 06:30:00', '0', '100', '4', 'Patents - USPTO', 'Bill McKinney', '^http://patft\.uspto\.gov/netacgi/nph-Parser.+', 'function detectWeb(doc, url) { var re = new RegExp("^http://patft\.uspto\.gov/netacgi/nph-Parser"); if(re.test(doc.location.href)) { return "book"; } else { return "multiple"; } }', 'function get_nextsibling(n) { var x=n.nextSibling; while (x.nodeType!=1) { x=x.nextSibling; } return x; } function scrape(doc) { var newItem = new Zotero.Item("patent"); newItem.url = doc.location.href; var extraText = new String(); var tmpStr = new String(); var tmpRefs = ""; var tmpTitle = doc.title; var fontTags = doc.getElementsByTagName("font"); for(var i=0; i<fontTags.length; i++) { if (fontTags[i].getAttribute("size") == "+1") { tmpTitle = tmpTitle + " - " + fontTags[i].innerHTML; } } tmpTitle = Zotero.Utilities.cleanString(tmpTitle); tmpTitle = tmpTitle.replace(/<[^>]+>/g, ""); newItem.title = tmpTitle; var cellTags = doc.getElementsByTagName("td"); for(var i=0; i<cellTags.length; i++) { var s = new String(cellTags[i].innerHTML); if (s.indexOf("United States Patent") > -1) { tmpStr = cellTags[i+1].childNodes[0].innerHTML; tmpStr = tmpStr.replace(/<[^>]+>/gi, ""); tmpStr = tmpStr.replace(/,/gi, ""); newItem.patentNumber = tmpStr; tmpStr = cellTags[i+3].innerHTML; tmpStr = tmpStr.replace(/<[^>]+>/gi, ""); newItem.issueDate = tmpStr; continue; } if (s.indexOf("Assignee") > -1) { tmpStr = cellTags[i+1].innerHTML; tmpStr = tmpStr.replace(/<\/?\w+>/gi, ""); newItem.assignee = tmpStr; continue; } if (s.indexOf("Inventors") > -1) { tmpStr = cellTags[i+1].innerHTML; var inventors = tmpStr.split(/<b>,/ig); for (var j=0; j<inventors.length; j++) { var tmpInventor = inventors[j]; tmpInventor = tmpInventor.replace(/<\/?\w+>/gi, ""); tmpInventor = tmpInventor.replace(/\([^\)]+\)/gi, ""); tmpInventor = tmpInventor.replace(/^\s+/gi, ""); var names = tmpInventor.split(";"); if (names) { var lname = names[0]; var fname = names[1]; lname = lname.replace(/^\s+/gi, ""); lname = lname.replace(/\s+$/gi, ""); fname= fname.replace(/^\s+/gi, ""); fname= fname.replace(/\s+$/gi, ""); newItem.creators.push({lastName:lname, firstName:fname, creatorType:"inventor"}); } } continue; } // references if (s.indexOf("<a href=\"/netacgi/nph-Parser?Sect2") > -1) { tmpRefs = tmpRefs + cellTags[i].childNodes[0].innerHTML + " "; } if (s.indexOf("<a href=\"http://appft1.uspto.gov/netacgi/nph-Parser?TERM1") > -1) { tmpRefs = tmpRefs + cellTags[i].childNodes[0].innerHTML + " "; } } var centerTags = doc.getElementsByTagName("center"); for(var i=0; i<centerTags.length; i++) { var s = new String(centerTags[i].innerHTML); if (s.indexOf("Abstract") > -1) { //newItem.extra = "ok"; var el = get_nextsibling(centerTags[i]); newItem.abstractNote = el.innerHTML; } } newItem.references = tmpRefs; newItem.complete(); } function doWeb(doc, url) { var re = new RegExp("^http://patft\.uspto\.gov/netacgi/nph-Parser.+"); if(re.test(doc.location.href)) { scrape(doc); } else { var items = Zotero.Utilities.getItemArray(doc, doc, "^http://patft\.uspto\.gov/netacgi/nph-Parser.+"); items = Zotero.selectItems(items); if(!items) { return true; } var uris = new Array(); for(var i in items) { uris.push(i); } Zotero.Utilities.processDocuments(uris, function(doc) { scrape(doc) }, function() { Zotero.done(); }, null); Zotero.wait(); } }'); REPLACE INTO translators VALUES ('3e684d82-73a3-9a34-095f-19b112d88bbf', '1.0.0b3.r1', '', '2009-02-03 05:45:00', 1, 100, 4, 'Google Books', 'Simon Kornblith and Michael Berkowitz', '^http://(books|www)\.google\.[a-z]+(\.[a-z]+)?/books\?(.*id=.*|.*q=.*)', 'function detectWeb(doc, url) { var re = new RegExp(''^http://(books|www)\\.google\\.[a-z]+(\.[a-z]+)?/books\\?id=([^&]+)'', ''i''); if(re.test(doc.location.href)) { return "book"; } else { return "multiple"; } }', 'function doWeb(doc, url) { // get local domain suffix var psRe = new RegExp("https?://(books|www)\.google\.([^/]+)/"); var psMatch = psRe.exec(url); var suffix = psMatch[2]; var prefix = psMatch[1]; var uri = doc.location.href; var newUris = new Array(); var re = new RegExp(''^http://(?:books|www)\\.google\\.[a-z]+(\.[a-z]+)?/books\\?id=([^&]+)'', ''i''); var m = re.exec(uri); if(m) { newUris.push(''http://''+prefix+''.google.''+suffix+''/books?id=''+m[2]); } else { var items = Zotero.Utilities.getItemArray(doc, doc, ''http://''+prefix+''\\.google\\.'' + suffix + ''/books\\?id=([^&]+)'', ''^(?:All matching pages|About this Book|Table of Contents|Index)''); // Drop " - Page" thing for(var i in items) { items[i] = items[i].replace(/- Page [0-9]+\s*$/, ""); } items = Zotero.selectItems(items); if(!items) { return true; } for(var i in items) { var m = re.exec(i); newUris.push(''http://''+prefix+''.google.''+suffix+''/books?id=''+m[2]); } } Zotero.debug(newUris); Zotero.Utilities.processDocuments(newUris, function(newDoc) { var newItem = new Zotero.Item("book"); newItem.extra = ""; var namespace = newDoc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var xpath = ''//h2[@class="title"]'' var elmt; if (elmt = newDoc.evaluate(xpath, newDoc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){ var title = Zotero.Utilities.superCleanString(elmt.textContent); newItem.title = title; Zotero.debug("title: " + title); } xpath = ''//div[@class="titlewrap"]/span[@class="addmd"]'' if (elmt = newDoc.evaluate(xpath, newDoc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){ var authors = Zotero.Utilities.superCleanString(elmt.textContent); if (authors.substring(0, 3) == "By "){ authors = authors.substring(3); } authors = authors.split(", "); for(j in authors) { newItem.creators.push(Zotero.Utilities.cleanAuthor(authors[j], "author")); } } xpath = ''//td[2][@id="bookinfo"]/div[@class="bookinfo_sectionwrap"]/div''; var elmts = newDoc.evaluate(xpath, newDoc, nsResolver, XPathResult.ANY_TYPE, null); while(elmt = elmts.iterateNext()) { var fieldelmt = newDoc.evaluate(''.//text()'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if(fieldelmt) { field = Zotero.Utilities.superCleanString(fieldelmt.nodeValue); Zotero.debug("output: " + field); if(field.substring(0,10) == "Published ") { newItem.date = field.substring(field.length-4); var publisher = newDoc.evaluate(''..//a'', fieldelmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if (publisher){ publisher = Zotero.Utilities.superCleanString(publisher.textContent); newItem.publisher = publisher; } } else if(field.substring(0,5) == "ISBN ") { newItem.ISBN = field.substring(5); } else if(field.substring(field.length-6) == " pages") { newItem.pages = field.substring(0, field.length-6); } else if(field.substring(0,12) == "Contributor ") { newItem.creators.push(Zotero.Utilities.cleanAuthor(field.substring(12), "contributor")); } } } newItem.complete(); }, function() { Zotero.done(); }, null); Zotero.wait(); }'); REPLACE INTO translators VALUES ('57a00950-f0d1-4b41-b6ba-44ff0fc30289', '1.0.0b3.r1', '', '2009-02-21 09:30:00', 1, 100, 4, 'Google Scholar', 'Simon Kornblith', 'http://scholar\.google\.(?:com|com?\.[a-z]{2}|[a-z]{2})/scholar', 'function detectWeb(doc, url) { return "multiple"; }', 'var haveEndNoteLinks; function scrape(doc) { var nsResolver = doc.createNSResolver(doc.documentElement); var items = new Array(); var itemGrabLinks = new Array(); var itemGrabLink; var links = new Array(); var types = new Array(); var itemTypes = new Array(); var attachments = new Array(); var titles = doc.evaluate(''//h3[@class="r"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var elmts = doc.evaluate(''//a[contains(@href, ".enw")]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var title; var i = 0; while(title = titles.iterateNext()) { itemGrabLinks[i] = elmts.iterateNext().href; items[i] = title.textContent; var link = doc.evaluate(''.//a'', title, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if (link){ links[i] = link.href; } i++; } items = Zotero.selectItems(items); if(!items) { if(Zotero.done) Zotero.done(true); return true; } var urls = new Array(); for(var i in items) { // get url urls.push(itemGrabLinks[i]); if(links[i]) { attachments.push([{title:"Google Scholar Linked Page", type:"text/html", url:links[i]}]); } else { attachments.push([]); } } var translator = Zotero.loadTranslator("import"); translator.setTranslator("881f60f2-0802-411a-9228-ce5f47b64c7d"); translator.setHandler("itemDone", function(obj, item) { item.attachments = attachments.shift(); item.complete(); }); Zotero.Utilities.HTTP.doGet(urls, function(text) { translator.setString(text); translator.translate(); }, function() { Zotero.done() }); } function doWeb(doc, url) { var nsResolver = doc.createNSResolver(doc.documentElement); //SR:Will use preference setting url instead of cookie to get EndNote links (works with ezproxy, doesn''t overwrite other prefs) //doc.cookie = "GSP=ID=deadbeefdeadbeef:IN=ebe89f7e83a8fe75+7e6cc990821af63:CF=3; domain=.scholar.google.com"; // determine if we need to reload the page // first check for EndNote links haveEndNoteLinks = doc.evaluate(''//a[contains(@href, ".enw")]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if(!haveEndNoteLinks) { // SR:Commenting out this bit as code for retrieving citations from "Related" links is unreliable and unnecessary //// next check if there are docs with no related articles //if(doc.evaluate(''''//p[@class="g"][not(descendant-or-self::text() = "Related Articles")]'''', // doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { // SR:Set preferences to show import links in English and do page reload // (bit of a hack as it overwrites user prefs for language and import link type) url = url.replace (/hl\=[^&]*&?/, ""); url = url.replace("scholar?", "scholar_setprefs?hl=en&scis=yes&scisf=3&submit=Save+Preferences&"); haveEndNoteLinks = true; Zotero.Utilities.loadDocument(url, scrape); Zotero.wait(); return; //} } scrape(doc, url); Zotero.wait(); }'); REPLACE INTO translators VALUES ('9c335444-a562-4f88-b291-607e8f46a9bb', '1.0.0b3.r1', '', '2008-07-02 11:00:00', '1', '100', '4', 'Berkeley Library Catalog', 'Simon Kornblith', '^https?://[^/]*berkeley.edu[^/]*/WebZ/(?:html/results.html|FETCH)\?.*sessionid=', 'function detectWeb(doc, url) { var resultsRegexp = /\/WebZ\/html\/results.html/i if(resultsRegexp.test(url)) { return "multiple"; } else { return "book"; } }', 'function reformURL(url) { return url.replace(/fmtclass=[^&]*/, "")+":fmtclass=marc"; } function doWeb(doc, url) { var resultsRegexp = /\/WebZ\/html\/results.html/i if(resultsRegexp.test(url)) { var items = Zotero.Utilities.getItemArray(doc, doc, "/WebZ/FETCH", "^[0-9]*$"); items = Zotero.selectItems(items); if(!items) { return true; } var urls = new Array(); for(var i in items) { urls.push(reformURL(i)); } } else { var urls = [reformURL(url)]; } var translator = Zotero.loadTranslator("import"); translator.setTranslator("a6ee60df-1ddc-4aae-bb25-45e0537be973"); var marc = translator.getTranslatorObject(); Zotero.Utilities.processDocuments(urls, function(newDoc) { var uri = newDoc.location.href; var namespace = newDoc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var elmts = newDoc.evaluate(''//table/tbody/tr[@valign="top"]'', newDoc, nsResolver, XPathResult.ANY_TYPE, null); var record = new marc.record(); while(elmt = elmts.iterateNext()) { var field = Zotero.Utilities.superCleanString(newDoc.evaluate(''./TD[1]/text()[1]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().nodeValue); var value = newDoc.evaluate(''./TD[2]/text()[1]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().nodeValue; // remove spacing value = value.replace(/^\s+/, ""); value = value.replace(/\s+$/, ""); if(field == 0) { record.leader = "00000"+value; } else { var ind = value[3]+value[5]; if (value.match(/^\d{1,2}\s{3}/)) value = Zotero.Utilities.cleanString(value.replace(/^\d{1,2}\s{3}/, "")); value = value.replace(/\$([a-z0-9]) /g, marc.subfieldDelimiter+"$1"); if(value[0] != marc.subfieldDelimiter) { value = marc.subfieldDelimiter+"a"+value; } record.addField(field, ind, value); } } var newItem = new Zotero.Item(); record.translate(newItem); var oldTags = newItem.tags; var newTags = new Array(); for each (var tag in oldTags) { if (newTags.indexOf(tag) == -1) newTags.push(tag) } newItem.tags = newTags; newItem.repository = "Berkeley Library Catalog"; newItem.complete(); }, function() { Zotero.done(); }, null); Zotero.wait(); }'); REPLACE INTO translators VALUES ('d0b1914a-11f1-4dd7-8557-b32fe8a3dd47', '1.0.0b3.r1', '', '2009-01-05 21:20:00', 1, 100, 4, 'EBSCOhost', 'Simon Kornblith and Michael Berkowitz', 'https?://[^/]+/(?:bsi|ehost)/(?:results|detail|folder)', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; // See if this is a search results or folder results page var searchResult = doc.evaluate(''//ul[@class="result-list" or @class="folder-list"]/li/div[@class="result-list-record" or @class="folder-item"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if(searchResult) { return "multiple"; } /* var xpath = ''//div[@class="citation-wrapping-div"]/dl[@class="citation-fields"]/dt[starts-with(text(), "Persistent link to this record")'' +'' or starts-with(text(), "V├¡nculo persistente a este informe")'' +'' or starts-with(text(), "Lien permanent ├á cette donn├⌐e")'' +'' or starts-with(text(), "Permanenter Link zu diesem Datensatz")'' +'' or starts-with(text(), "Link permanente al record")'' +'' or starts-with(text(), "Link permanente para este registro")'' +'' or starts-with(text(), "µ£¼Φ¿ÿΘîäσ¢║σ«ÜΘÇúτ╡É")'' +'' or starts-with(text(), "µ¡ñΦ«░σ╜òτÜäµ░╕Σ╣àΘô╛µÄÑ")'' +'' or starts-with(text(), "πüôπü«πâ¼πé│πâ╝πâëπü╕πü«πâæπâ╝πé╖πé╣πé┐πâ│πâê πâ¬πâ│πé»")'' +'' or starts-with(text(), "δáê∞╜öδô£ δºüφü¼ URL")'' +'' or starts-with(text(), "╨ƒ╨╛╤ü╤é╨╛╤Å╨╜╨╜╨░╤Å ╤ü╤ü╤ï╨╗╨║╨░ ╨╜╨░ ╤ì╤é╤â ╨╖╨░╨┐╨╕╤ü╤î")'' +'' or starts-with(text(), "Bu kayda s├╝rekli ba─ƒlant─▒")'' +'' or starts-with(text(), "╬£╧î╬╜╬╣╬╝╬┐╧é ╧â╧ì╬╜╬┤╬╡╧â╬╝╬┐╧é ╧â╬╡ ╬▒╧à╧ä╧î ╧ä╬┐ ╬▒╧ü╧ç╬╡╬»╬┐")]''; */ var xpath = ''//input[@id="ctl00_ctl00_MainContentArea_MainContentArea_topDeliveryControl_deliveryButtonControl_lnkExportImage"]''; var persistentLink = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if(persistentLink) { return "journalArticle"; } }', 'var customViewStateMatch = /<input type="hidden" name="__CUSTOMVIEWSTATE" id="__CUSTOMVIEWSTATE" value="([^"]+)" \/>/ var host; function fullEscape(text) { return escape(text).replace(/\//g, "%2F").replace(/\+/g, "%2B"); } function generateDeliverString(nsResolver, doc){ var hiddenInputs = doc.evaluate(''//input[@type="hidden" and not(contains(@name, "folderHas"))]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var hiddenInput; var deliverString =""; while(hiddenInput = hiddenInputs.iterateNext()) { deliverString = deliverString+hiddenInput.name.replace(/\$/g, "%24")+"="+encodeURIComponent(hiddenInput.value) + "&"; } var otherHiddenInputs = doc.evaluate(''//input[@type="hidden" and contains(@name, "folderHas")]'', doc, nsResolver, XPathResult.ANY_TYPE, null); while(hiddenInput = otherHiddenInputs.iterateNext()) { deliverString = deliverString+hiddenInput.name.replace(/\$/g, "%24")+"="+escape(hiddenInput.value).replace(/\//g, "%2F").replace(/%20/g, "+") + "&"; } deliverString = deliverString +"&ctl00%24ctl00%24MainContentArea%24MainContentArea%24topDeliveryControl%24deliveryButtonControl%24lnkExportImage.x=5" +"&ctl00%24ctl00%24MainContentArea%24MainContentArea%24topDeliveryControl%24deliveryButtonControl%24lnkExportImage.y=14"; return deliverString; } /* * given the text of the delivery page, downloads an item */ function downloadFunction(text) { var postLocation = /<form (?:autocomplete="o(?:ff|n)" )?name="aspnetForm" method="post" action="([^"]+)"/ var m = postLocation.exec(text); var deliveryURL = m[1].replace(/&/g, "&"); m = customViewStateMatch.exec(text); var downloadString = "__EVENTTARGET=&__EVENTARGUMENT=&__CUSTOMVIEWSTATE="+fullEscape(m[1])+"&__VIEWSTATE=&ctl00%24ctl00%24MainContentArea%24MainContentArea%24ctl00%24btnSubmit=Save&ctl00%24ctl00%24MainContentArea%24MainContentArea%24ctl00%24BibFormat=1&ajax=enabled"; Zotero.Utilities.HTTP.doPost(host+"/ehost/"+deliveryURL, downloadString, function(text) { // get marked records as RIS // load translator for RIS var test = text.match(/UR\s+\-(.*)/g); if (test[0].match("@")) text = text.replace(/UR\s+\-(.*)/, ""); if (text.match(/AB\s\s\-/)) text = text.replace(/AB\s\s\-/, "N2 -"); var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { if (text.match("L3")) { item.DOI = text.match(/L3\s+\-\s*(.*)/)[1]; } item.itemType = "journalArticle"; item.complete(); }); translator.translate(); Zotero.done(); }); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var hostRe = new RegExp("^(https?://[^/]+)/"); var m = hostRe.exec(url); host = m[1]; var searchResult = doc.evaluate(''//ul[@class="result-list" or @class="folder-list"]/li/div[@class="result-list-record" or @class="folder-item"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if(searchResult) { var titlex = ''//div[@class="result-list-record" or @class="folder-item-detail"]/span/a''; var titles = doc.evaluate(titlex, doc, nsResolver, XPathResult.ANY_TYPE, null); var items = new Object(); var title; while (title = titles.iterateNext()) { items[title.href] = title.textContent; } var items = Zotero.selectItems(items); if(!items) { return true; } var uris = new Array(); for(var i in items) { uris.push(i); } Zotero.Utilities.processDocuments(uris, function(newDoc){ var postURL = newDoc.evaluate(''//form[@name="aspnetForm"]/@action'', newDoc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); postURL = host+"/ehost/"+postURL.nodeValue; var deliverString = generateDeliverString(nsResolver, newDoc); Zotero.Utilities.HTTP.doPost(postURL, deliverString, downloadFunction); }); } else { var postURL = doc.evaluate(''//form[@name="aspnetForm"]/@action'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); postURL = host+"/ehost/"+postURL.nodeValue; var deliverString = generateDeliverString(nsResolver, doc); Zotero.Utilities.HTTP.doPost(postURL, deliverString, downloadFunction); } Zotero.wait(); }'); REPLACE INTO translators VALUES ('ce7a3727-d184-407f-ac12-52837f3361ff', '1.0.0b3.r1', '', '2008-04-18 08:55:00', '1', '100', '4', 'NYTimes.com', 'Simon Kornblith', '^http://(?:query\.nytimes\.com/search/query|(?:select\.|www\.)?nytimes\.com/.)', 'function detectWeb(doc, url) { if(doc.title.substr(0, 30) == "The New York Times: Search for") { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var result = doc.evaluate(''//div[@id="srchContent"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if(result) { return "multiple"; } } else { var metaTags = doc.getElementsByTagName("meta"); if(metaTags.namedItem("hdl") && metaTags.namedItem("byl")) { return "newspaperArticle"; } } }', 'function associateMeta(newItem, metaTags, field, zoteroField) { if(metaTags[field]) { newItem[zoteroField] = metaTags[field]; } } function scrape(doc, url) { var newItem = new Zotero.Item("newspaperArticle"); newItem.publicationTitle = "The New York Times"; newItem.ISSN = "0362-4331"; var metaTags = new Object(); if(url != undefined) { newItem.url = url; var metaTagRe = /<meta[^>]*>/gi; var nameRe = /name="([^"]+)"/i; var contentRe = /content="([^"]+)"/i; var m = doc.match(metaTagRe); if(!m) { return; } for(var i=0; i<m.length; i++) { var name = nameRe.exec(m[i]); var content = contentRe.exec(m[i]); if(name && content) { metaTags[name[1]] = content[1]; } } if(!metaTags["hdl"]) { return; } newItem.attachments.push({url:url, title:"New York Times Snapshot", mimeType:"text/html"}); } else { newItem.url = doc.location.href; var metaTagHTML = doc.getElementsByTagName("meta"); for(var i=0; i<metaTagHTML.length; i++) { var key = metaTagHTML[i].getAttribute("name"); var value = metaTagHTML[i].getAttribute("content"); if(key && value) { metaTags[key] = value; } } newItem.attachments.push({document:doc, title:"New York Times Snapshot"}); } associateMeta(newItem, metaTags, "dat", "date"); associateMeta(newItem, metaTags, "hdl", "title"); associateMeta(newItem, metaTags, "dsk", "section"); associateMeta(newItem, metaTags, "articleid", "accessionNumber"); if(metaTags["byl"]) { var author = Zotero.Utilities.cleanString(metaTags["byl"]); if(author.substr(0, 3).toLowerCase() == "by ") { author = author.substr(3); } var authors = author.split(" and "); for each(var author in authors) { // fix capitalization var words = author.split(" "); for(var i in words) { words[i] = words[i][0].toUpperCase()+words[i].substr(1).toLowerCase(); } author = words.join(" "); if(words[0] == "The") { newItem.creators.push({lastName:author, creatorType:"author", fieldMode:true}); } else { newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author")); } } } if(metaTags["keywords"]) { var keywords = metaTags["keywords"]; newItem.tags = keywords.split(","); for(var i in newItem.tags) { newItem.tags[i] = newItem.tags[i].replace(" ", ", "); } } newItem.complete(); } function doWeb(doc, url) { if(doc.title.substr(0, 30) == "The New York Times: Search for") { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var result = doc.evaluate(''//div[@id="srchContent"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); var items = Zotero.Utilities.getItemArray(doc, result, ''^http://(?:select\.|www\.)nytimes.com/.*\.html(\\?|$)''); items = Zotero.selectItems(items); if(!items) { return true; } var urls = new Array(); for(var i in items) { urls.push(i); } Zotero.Utilities.HTTP.doGet(urls, function(text, response, url) { scrape(text, url) }, function() { Zotero.done(); }, null); Zotero.wait(); } else { scrape(doc); } }'); REPLACE INTO translators VALUES ('1e6d1529-246f-4429-84e2-1f1b180b250d', '1.0.0b3.r1', '', '2006-12-12 23:41:00', 1, 100, 4, 'The Chronicle of Higher Education', 'Simon Kornblith', '^http://chronicle\.com/', 'function detectWeb(doc, url) { var articleRegexp = /^http:\/\/chronicle\.com\/(?:daily|weekly)\/[^/]+\// if(articleRegexp.test(url)) { if(doc.location.href.indexOf("weekly") != -1) { return "magazineArticle"; } else { return "webpage"; } } else { var aTags = doc.getElementsByTagName("a"); for(var i=0; i<aTags.length; i++) { if(articleRegexp.test(aTags[i].href)) { return "multiple"; } } } }', 'function associateMeta(newItem, metaTags, field, zoteroField) { if(metaTags.namedItem(field)) { newItem[zoteroField] = Zotero.Utilities.cleanString(metaTags.namedItem(field).getAttribute("content")); } } function scrape(doc) { if(doc.location.href.indexOf("weekly") != -1) { var newItem = new Zotero.Item("magazineArticle"); var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; // go in search of pages var content = doc.evaluate(''/html/body/table[@class="layout"]/tbody/tr[1]/td[@class="content"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if(content) { var pagesRegexp = /http:\/\/chronicle.com\nSection: [^\n]+\nVolume [0-9]+, Issue [0-9]+, Pages? ([A-Z0-9\-]+)/; var m = pagesRegexp.exec(content.textContent); if(m) { newItem.pages = m[1]; } } } else { var newItem = new Zotero.Item("webpage"); } newItem.publicationTitle = "The Chronicle of Higher Education"; newItem.ISSN = "0009-5982"; newItem.url = doc.location.href; var metaTags = doc.getElementsByTagName("meta"); newItem.attachments.push({document:doc, title:"Chronicle of Higher Education Snapshot"}); associateMeta(newItem, metaTags, "published_date", "date"); associateMeta(newItem, metaTags, "headline", "title"); associateMeta(newItem, metaTags, "section", "section"); associateMeta(newItem, metaTags, "volume", "volume"); associateMeta(newItem, metaTags, "issue", "issue"); if(metaTags.namedItem("byline")) { var author = Zotero.Utilities.cleanString(metaTags.namedItem("byline").getAttribute("content")); if(author.substr(0, 3).toLowerCase() == "by ") { author = author.substr(3); } var authors = author.split(" and "); for each(var author in authors) { // fix capitalization var words = author.split(" "); for(var i in words) { words[i] = words[i][0].toUpperCase()+words[i].substr(1).toLowerCase(); } author = words.join(" "); if(words[0] == "The") { newItem.creators.push({lastName:author, creatorType:"author", fieldMode:true}); } else { newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author")); } } } newItem.complete(); } function doWeb(doc, url) { var articleRegexp = /^http:\/\/chronicle\.com\/(?:daily|weekly)\/[^/]+\//; if(articleRegexp.test(url)) { scrape(doc); } else { var items = Zotero.Utilities.getItemArray(doc, doc, ''^http://chronicle\\.com/(?:daily|weekly)/[^/]+/''); items = Zotero.selectItems(items); if(!items) { return true; } var urls = new Array(); for(var i in items) { urls.push(i); } Zotero.Utilities.processDocuments(urls, scrape, function() { Zotero.done(); }); Zotero.wait(); } }'); REPLACE INTO translators VALUES ('4c164cc8-be7b-4d02-bfbf-37a5622dfd56', '1.0.0b3.r1', '', '2006-12-14 00:40:00', 1, 100, 4, 'The New York Review of Books', 'Simon Kornblith', '^https?://www\.nybooks\.com/', 'function detectWeb(doc, url) { var articleRegexp = /^http:\/\/www\.nybooks\.com\/articles\/[0-9]+\/?/ if(articleRegexp.test(url)) { return "journalArticle"; } else { var aTags = doc.getElementsByTagName("a"); for(var i=0; i<aTags.length; i++) { if(articleRegexp.test(aTags[i].href)) { return "multiple"; } } } }', 'function associateMeta(newItem, metaTags, field, zoteroField) { if(metaTags.namedItem(field)) { newItem[zoteroField] = Zotero.Utilities.cleanString(metaTags.namedItem(field).getAttribute("content")); } } function scrape(doc) { var newItem = new Zotero.Item("journalArticle"); newItem.publicationTitle = "The New York Review of Books"; newItem.ISSN = "0028-7504"; var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; newItem.url = doc.location.href; var metaTags = doc.getElementsByTagName("meta"); newItem.attachments.push({document:doc, title:"New York Review of Books Snapshot"}); associateMeta(newItem, metaTags, "dc.title", "title"); var info = doc.evaluate(''//div[@id="center-content"]/h4[@class="date"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if(info) { // get date (which is in an a tag) newItem.date = doc.evaluate("./a", info, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if(newItem.date) { newItem.date = newItem.date.textContent; } info = Zotero.Utilities.cleanString(info.textContent); // get volume and issue var infoRe = /Volume ([0-9]+), Number ([0-9]+)/; var m = infoRe.exec(info); if(m) { newItem.volume = m[1]; newItem.issue = m[2]; } } var authors = doc.evaluate(''//div[@id="center-content"]/h4/a[substring(@href, 1, 9) = "/authors/"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var author; while(author = authors.iterateNext()) { newItem.creators.push(Zotero.Utilities.cleanAuthor(author.textContent, "author", false)); } newItem.complete(); } function doWeb(doc, url) { var articleRegexp = /^http:\/\/www\.nybooks\.com\/articles\/[0-9]+/ if(articleRegexp.test(url)) { scrape(doc); } else { var items = Zotero.Utilities.getItemArray(doc, doc, "^https?://www\\.nybooks\\.com/articles/[0-9]+/?"); items = Zotero.selectItems(items); if(!items) { return true; } var urls = new Array(); for(var i in items) { urls.push(i); } Zotero.Utilities.processDocuments(urls, scrape, function() { Zotero.done(); }); Zotero.wait(); } }'); REPLACE INTO translators VALUES ('d1bf1c29-4432-4ada-8893-2e29fc88fd9e', '1.0.0b3.r1', '', '2007-06-21 20:10:00', 1, 100, 4, 'washingtonpost.com', 'Simon Kornblith', '^http://www\.washingtonpost\.com/', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; // don''t say we can scrape when we can''t; make sure user is logged in var signedIn = doc.evaluate(''//a[text() = "Sign out" or text() = "Sign Out"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if(!signedIn) { return; } var articleRegexp = /http:\/\/www\.washingtonpost\.com\/wp-dyn\/content\/article\/[0-9]+\/[0-9]+\/[0-9]+\/[^\/]+\.html/ if(articleRegexp.test(url)) { return "newspaperArticle"; } else { var aTags = doc.getElementsByTagName("a"); for(var i=0; i<aTags.length; i++) { if(articleRegexp.test(aTags[i].href)) { return "multiple"; } } } }', 'function scrape(doc) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var newItem = new Zotero.Item("newspaperArticle"); newItem.publicationTitle = "The Washington Post"; newItem.ISSN = "0740-5421"; newItem.url = doc.location.href; var metaTags = doc.getElementsByTagName("meta"); // Elena''s code to grab print version (all pages) snapshotURL=doc.location.href.replace(".html", "_pf.html"); newItem.attachments.push({title:"Washington Post Snapshot", mimeType:"text/html", url:snapshotURL, snapshot:true}); // grab title from doc title newItem.title = doc.title.replace(" - washingtonpost.com", ""); var byline = doc.evaluate(''//div[@id="byline"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); // grab authors from byline if(byline) { var authors = byline.textContent.substr(3).split(" and "); for each(var author in authors) { newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author")); } } var fonts = doc.evaluate(''//div[@id="article"]/p/font/text()'', doc, nsResolver, XPathResult.ANY_TYPE, null); var font; while(font = fonts.iterateNext()) { var pageRe = /([^;]+);(?:[\xA0 ]+Pages?[\xA0 ]+([A-Z0-9\-]+))?/ // grab pages and date Zotero.debug(Zotero.Utilities.cleanString(font.nodeValue)); var m = pageRe.exec(font.nodeValue); if(m) { newItem.date = m[1]; newItem.pages = m[2]; break; } } // grab tags from meta tag var keywords = doc.getElementsByTagName("meta"); if(keywords) { keywords = keywords.namedItem("keywords"); if(keywords) { keywords = keywords.getAttribute("content"); if(keywords) { newItem.tags = keywords.split(/, ?/); } } } newItem.complete(); } function doWeb(doc, url) { var articleRegexp = /http:\/\/www\.washingtonpost\.com\/wp-dyn\/content\/article\/[0-9]+\/[0-9]+\/[0-9]+\/[^\/]+\.html/ if(articleRegexp.test(url)) { scrape(doc); } else { var items = Zotero.Utilities.getItemArray(doc, doc, articleRegexp); items = Zotero.selectItems(items); if(!items) { return true; } var urls = new Array(); for(var i in items) { urls.push(i); } Zotero.Utilities.processDocuments(urls, scrape, function() { Zotero.done(); }); Zotero.wait(); } }'); REPLACE INTO translators VALUES ('a07bb62a-4d2d-4d43-ba08-d9679a0122f8', '1.0.0b3.r1', '', '2008-01-09 20:00:00', 1, 100, 4, 'ABC-CLIO Serials Web', 'Simon Kornblith', 'https?://[^/]*serials\.abc-clio\.com[^/]*/active/go/ABC-Clio-Serials_v4', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var result = doc.evaluate(''//table[@class="rc_main"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if(result) { return "multiple"; } }', 'function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var availableItems = new Array(); var availableAttachments = new Array(); var elmts = doc.evaluate(''//table[@class="rc_main"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var elmt; while(elmt = elmts.iterateNext()) { var title = doc.evaluate(''./tbody/tr/td[b/text() = "Title:"]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); var checkbox = doc.evaluate(''.//input[@type = "checkbox"]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if(title, checkbox) { checkbox = checkbox.name; availableItems[checkbox] = Zotero.Utilities.cleanString(title.textContent).substr(6); var links = doc.evaluate(''./tbody/tr/td[b/text() = "Fulltext: ["]/a'', elmt, nsResolver, XPathResult.ANY_TYPE, null); var link; var attach = new Array(); while(link = links.iterateNext()) { attach.push({url:link.href, title:Zotero.Utilities.cleanString(link.textContent)+" Full Text", mimeType:"text/html"}); } availableAttachments[checkbox] = attach; } } var items = Zotero.selectItems(availableItems); if(!items) { return true; } var postString = "_defaultoperation=Download+Options&research_field=&research_value=&jumpto="; var attachments = new Array(); for(var i in availableItems) { postString += "&_checkboxname="+i+(items[i] ? "&"+i+"=1" : ""); if(items[i]) { attachments.push(availableAttachments[i]); } } Zotero.Utilities.HTTP.doPost(url, postString, function(text) { Zotero.Utilities.HTTP.doPost(url, "_appname=serials&_defaultoperation=Download+Documents&_formname=download&download_format=citation&download_which=tagged&download_where=ris&mailto=&mailreplyto=&mailsubject=&mailmessage=", function(text) { // get link var linkRe = /<a\s+class="button"\s+href="([^"]+)"\s+id="resource_link"/i; var m = linkRe.exec(text); if(!m) { throw("regular expression failed!"); } Zotero.Utilities.HTTP.doGet(m[1], function(text) { // load translator for RIS var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { if(item.notes && item.notes[0]) { item.extra = item.notes[0].note; delete item.notes; item.notes = undefined; } // grab uni data from thesis if(item.itemType == "thesis") { var re = /^(.+?) ([0-9]{4})\. ([0-9]+) pp\.(.*)$/; var m = re.exec(item.extra); if(m) { item.publisher = m[1]; item.date = m[2]; item.pages = m[3]; item.extra = m[4]; } } // fix periods for(var i in item.creators) { var nameLength = item.creators[i].firstName.length; if(item.creators[i].firstName[nameLength-1] == ".") { item.creators[i].firstName = item.creators[i].firstName.substr(0, nameLength-1); } } for(var i in item.tags) { var tagLength = item.tags[i].length; if(item.tags[i][tagLength-1] == ".") { item.tags[i] = item.tags[i].substr(0, tagLength-1); } } // fix title item.title = Zotero.Utilities.superCleanString(item.title); // add attachments item.attachments = attachments.shift(); item.complete(); }); translator.translate(); Zotero.done(); }); }); }); Zotero.wait(); }'); REPLACE INTO translators VALUES ('fa396dd4-7d04-4f99-95e1-93d6f355441d', '1.0.0b3.r1', '', '2008-02-06 21:00:00', 1, 100, 4, 'CiteSeer', 'Simon Kornblith', '^http://(?:citeseer\.ist\.psu\.edu/|citeseer\.csail\.mit\.edu/|citeseer\.ifi\.unizh\.ch/|citeseer\.comp\.nus\.edu\.sg/)', 'function detectWeb(doc, url) { var searchRe = /http:\/\/[^\/]+\/ci?s/; if(searchRe.test(url)) { return "multiple"; } else { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; if(doc.evaluate(''/html/body/span[@class="m"]/pre'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { return "journalArticle"; } } }', 'function scrape(doc) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; // figure out what attachments to add var attachments = new Array(); var results = doc.evaluate(''/html/body/span[@class="m"]/table[@class="h"]/tbody/tr/td[4]/center/font/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var elmt; var acceptableTypes = ["PDF", "PS", "PS.gz"]; var mimeTypes = ["application/pdf", "application/postscript", "application/gzip"]; var resultsArray = []; while (elmt = results.iterateNext()) { resultsArray.push(elmt); } resultsArray = resultsArray.filter(function (element, index, array) { return (acceptableTypes.indexOf(element.textContent.toString()) != -1); }); resultsArray = resultsArray.sort(function (a,b) { return (acceptableTypes.indexOf(a.textContent.toString()) - acceptableTypes.indexOf(b.textContent.toString())); }); if (resultsArray.length > 0) { var elmt = resultsArray[0]; var kind = elmt.textContent.toString(); var index = acceptableTypes.indexOf(kind); var attachment = {url:elmt.href, mimeType:mimeTypes[index], title:"CiteSeer Full Text "+kind}; attachments.push(attachment); } var bibtex = doc.evaluate(''/html/body/span[@class="m"]/pre/text()'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if(bibtex) { var translator = Zotero.loadTranslator("import"); translator.setTranslator("9cb70025-a888-4a29-a210-93ec52da40d4"); translator.setString(bibtex.nodeValue.toString()); translator.setHandler("itemDone", function(obj, item) { if(item.url) { // add http to url item.url = "http://"+item.url; } item.attachments = attachments; item.complete(); }); translator.translate(); } else { throw "No BibTeX found!"; } } function doWeb(doc, url) { var searchRe = /http:\/\/([^\/]+)\/ci?s/; var m = searchRe.exec(doc.location.href); if(m) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var items = Zotero.Utilities.getItemArray(doc, doc, "^http://"+m[1]+"/[^/]+.html"); items = Zotero.selectItems(items); if(!items) { return true; } var urls = new Array(); for(var i in items) { urls.push(i); } Zotero.Utilities.processDocuments(urls, scrape, function() { Zotero.done(); }); Zotero.wait(); } else { scrape(doc); } }'); REPLACE INTO translators VALUES ('8917b41c-8527-4ee7-b2dd-bcbc3fa5eabd', '1.0.0b4.r5', '', '2008-02-01 19:30:00', '1', '100', '4', 'CiteULike', 'Sean Takats', 'https?://(?:www\.)?citeulike.org(?:.*/tag/[^/]*$|/search/|/journal/|/group/[0-9]+/library$|/\?page=[0-9]+$|/.*article/[0-9]+$|/$)', 'function detectWeb(doc, url){ var articleRe = /\/article\/[0-9]+$/; var m = url.match(articleRe); var newUris = new Array(); if (m){ return "journalArticle"; } else { return "multiple"; } }', 'function doWeb(doc, url){ var articleRe = /\/article\/[0-9]+$/; var m = url.match(articleRe); var newUris = new Array(); if (m){ newUris.push(url.replace(/citeulike\.org\//, "citeulike.org/endnote/")); } else { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var elmt; var elmts = doc.evaluate(''//a[@class="title"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var items = new Object(); while(elmt = elmts.iterateNext()) { items[elmt.href] = Zotero.Utilities.trimInternal(elmt.textContent); } items = Zotero.selectItems(items); if(!items) return true; for(var uri in items) { newUris.push(uri.replace(/citeulike\.org\//, "citeulike.org/endnote/")); } } Zotero.Utilities.HTTP.doGet(newUris, function(text) { var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.translate(); Zotero.done(); }); Zotero.wait(); }'); REPLACE INTO translators VALUES ('ecddda2e-4fc6-4aea-9f17-ef3b56d7377a', '1.0.0b3.r1', '', '2009-01-28 18:10:00', 1, 100, 4, 'arXiv.org', 'Sean Takats and Michael Berkowitz', 'http://(?:([^\.]+\.))?(?:(arxiv\.org|xxx.lanl.gov)/(?:find/\w|list/\w|abs/)|eprintweb.org/S/(?:search|archive|article)(?!.*refs$)(?!.*cited$))', 'function detectWeb(doc, url) { var searchRe = /^http:\/\/(?:([^\.]+\.))?(?:(arxiv\.org|xxx\.lanl\.gov)\/(?:find|list)|eprintweb.org\/S\/(?:archive|search$))/; if(searchRe.test(url)) { return "multiple"; } else { return "journalArticle"; } }', 'function getPDF(articleID) { return {url:"http://www.arxiv.org/pdf/" + articleID + ".pdf", mimeType:"application/pdf", title:articleID + " PDF"}; } function doWeb(doc, url) { var eprintMultRe = /^http:\/\/(?:www\.)?eprintweb.org\/S\/(?:search|archive)/; var eprintMultM = eprintMultRe.exec(url); var eprintSingRe = /^http:\/\/(?:www\.)?eprintweb.org\/S\/(?:article|search\/[0-9]+\/A[0-9]+)/; var eprintSingM = eprintSingRe.exec(url); if (eprintMultM) { var elmtsXPath = ''//table/tbody/tr/td[@class="txt"]/a[text()="Abstract"]/../b''; var titlesXPath = ''//table/tbody/tr/td[@class="lti"]''; var titleNode = ''./text()''; } else { var elmtsXPath = ''//div[@id="dlpage"]/dl/dt/span[@class="list-identifier"]/a[1]''; var titlesXPath = ''//div[@id="dlpage"]/dl/dd/div[@class="meta"]/div[@class="list-title"]''; } var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var elmts = doc.evaluate(elmtsXPath, doc, nsResolver, XPathResult.ANY_TYPE, null); var titles = doc.evaluate(titlesXPath, doc, nsResolver, XPathResult.ANY_TYPE, null); var newURIs = new Array(); var elmt = elmts.iterateNext(); var title = titles.iterateNext(); if (elmt && titles) { var availableItems = new Array(); var arXivCats = new Array(); var arXivIDs = new Array(); var i=0; if (eprintMultM){ do { var newID = doc.evaluate(''./text()'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; newID = newID.replace(/arXiv:/, ""); newID = newID.replace(/\//g, "%2F"); newID = newID.replace(/v\d*/, ""); //remove version number availableItems[i] = doc.evaluate(titleNode, title, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; arXivIDs[i] = newID; i++; } while ((elmt = elmts.iterateNext()) && (title = titles.iterateNext())); } else{ do { var newID= elmt.textContent; newID = newID.replace(/arXiv:/, ""); newID = newID.replace(/\//g, "%2F"); newID = newID.replace(/v\d*/, ""); //remove version number availableItems[i] = Zotero.Utilities.cleanString(title.textContent.replace(/^\s*Title:\s+/, "")); arXivIDs[i] = newID; i++; } while ((elmt = elmts.iterateNext()) && (title = titles.iterateNext())); } var items = Zotero.selectItems(availableItems); if(!items) { return true; } for(var i in items) { newURIs.push("http://export.arxiv.org/oai2?verb=GetRecord&identifier=oai%3AarXiv.org%3A" + arXivIDs[i] + "&metadataPrefix=oai_dc"); } } else { if (eprintSingM){ var titleID = doc.evaluate(''//td[@class="ti"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; var arXivID = doc.evaluate(''//table/tbody/tr[4]/td/table/tbody/tr/td[1]/table/tbody/tr[1]/td[@class="txt"]/b'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; arXivID = arXivID.substring(0, arXivID.indexOf(" ")); arXivID = arXivID.replace(/arXiv:/, ""); arXivID = arXivID.replace(/\//g, "%2F"); } else { var arXivID = doc.evaluate(''//title'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; var titleRe = /\[([^\]]*)]/; var m = titleRe.exec(arXivID); arXivID = m[1]; arXivID = arXivID.replace(/\//g, "%2F"); } arXivID = arXivID.replace(/v\d*/, ""); //remove version number Zotero.debug("ID= "+ arXivID); newURIs.push("http://export.arxiv.org/oai2?verb=GetRecord&identifier=oai%3AarXiv.org%3A" + arXivID + "&metadataPrefix=oai_dc"); } Zotero.Utilities.HTTP.doGet(newURIs, function(text) { var newItem = new Zotero.Item("journalArticle"); // remove header text = text.replace(/<!DOCTYPE[^>]*>/, "").replace(/<\?xml[^>]*\?>/, ""); // fix non-compliant XML tags (colons) text = text.replace(/<dc:/g, "<dc_").replace(/<\/dc:/g, "</dc_"); text = text.replace(/<oai_dc:dc/g, "<oai_dc_dc").replace(/<\/oai_dc:dc/g, "</oai_dc_dc"); text = text.replace(/<OAI-PMH[^>]*>/, "").replace(/<\/OAI-PMH[^>]*>/, ""); text = "<zotero>" + text + "</zotero>"; var xml = new XML(text); var title; var citation = xml.GetRecord.record.metadata.oai_dc_dc; var test = xml..responseDate.text().toString(); if (citation.dc_title.length()){ title = Zotero.Utilities.cleanString(citation.dc_title.text().toString()); newItem.title = title; } Zotero.debug("article title: " + title); var type = ""; if(citation.dc_creator.length()) { var authors = citation.dc_creator; for(var j=0; j<authors.length(); j++) { Zotero.debug("author: " + authors[j]); newItem.creators.push(Zotero.Utilities.cleanAuthor(authors[j].text().toString(),type,true)); } } if (citation.dc_date.length()) { var dates = citation.dc_date; newItem.date = Zotero.Utilities.cleanString(dates[0].text().toString()); } if (citation.dc_description.length()) { var descriptions = citation.dc_description; for (var j=0; j<descriptions.length(); j++) { var noteStr = Zotero.Utilities.cleanString(descriptions[j].text().toString()); newItem.notes.push({note:noteStr}); } } if (citation.dc_subject.length()) { var subjects = citation.dc_subject; for (var j=0; j<subjects.length(); j++) { var subjectValue = Zotero.Utilities.cleanString(subjects[j].text().toString()); newItem.tags.push(subjectValue); } } if (citation.dc_identifier.length()) { var identifiers = citation.dc_identifier; for (var j=0; j<identifiers.length(); j++) { var identifier = Zotero.Utilities.cleanString(identifiers[j].text().toString()); if (identifier.substr(0, 4) == "doi:") { newItem.DOI = identifier; } else if (identifier.substr(0, 7) == "http://") { newItem.url = identifier; } else { newItem.extra = identifier; } } } var articleID = ""; if (xml.GetRecord.record.header.identifier.length()) { articleID = xml.GetRecord.record.header.identifier.text().toString(); articleID = articleID.substr(14); newItem.publicationTitle = articleID; } // TODO add "arXiv.org" to bib data? newItem.attachments.push({url:newItem.url, title:"arXiv.org Snapshot", mimeType:"text/html"}); newItem.attachments.push(getPDF(articleID)); if (newItem.notes[0][''note'']) { newItem.abstractNote = newItem.notes[0][''note'']; newItem.notes = new Array(); } newItem.complete(); }, function() {Zotero.done();}, null); Zotero.wait(); }'); REPLACE INTO translators VALUES ('232903bc-7307-4058-bb1a-27cfe3e4e655', '1.0.0b3.r1', '', '2007-04-23 17:00:00', '0', '100', '4', 'SPIRES', 'Sean Takats', '^http://www.slac.stanford.edu/spires/find/hep/', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var citations = doc.evaluate(''//dl/dd/a[text()="BibTeX"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var citation = citations.iterateNext(); var titles = doc.evaluate(''//p/b[1]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var title = titles.iterateNext(); if(citation && title) { // search page return "multiple"; } }', 'function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var citations = doc.evaluate(''//dl/dd/a[text()="BibTeX"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var citation = citations.iterateNext(); // var titles = doc.evaluate(''//p/b[1]'', doc, nsResolver, // XPathResult.ANY_TYPE, null); var titles = doc.evaluate(''//p[b[1]]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var title = titles.iterateNext(); if(citation && title) { // search page var items = new Object(); do { items[citation.href] = Zotero.Utilities.cleanString(title.textContent); } while((citation=citations.iterateNext()) && (title=titles.iterateNext())) items = Zotero.selectItems(items); if(!items) return true; var newUris = new Array(); for(var id in items) { newUris.push(id); } } else { //single result page? } Zotero.Utilities.HTTP.doGet(newUris, function(text) { var m = text.match(/<pre>(?:.|[\r\n])*?<\/pre>/g); var bibTeXString = ""; for each(var citation in m) { // kill pre tags citation = citation.substring(5, citation.length-6); bibTeXString += citation; } // import using BibTeX var translator = Zotero.loadTranslator("import"); translator.setTranslator("9cb70025-a888-4a29-a210-93ec52da40d4"); translator.setString(bibTeXString); translator.setHandler("itemDone", function(obj, item) { item.complete(); }); translator.translate(); Zotero.done(); }); Zotero.wait(); }'); REPLACE INTO translators VALUES ('fe728bc9-595a-4f03-98fc-766f1d8d0936', '1.0.0b4.r5', '', '2009-01-10 04:45:00', 1, 100, 4, 'Wiley InterScience', 'Sean Takats and Michael Berkowitz', 'https?:\/\/(?:www3\.|www\.)?interscience\.wiley\.com[^\/]*\/(?:search\/|(cgi-bin|journal)\/[0-9]+\/abstract|journal)', 'function detectWeb(doc, url){ var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var xpath = ''//input[@name="ID"][@type="checkbox"]''; if(doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } if (url.match(/journal\/\d+\/(issue|home)$/)) { return "multiple"; } var m = url.match(/https?:\/\/[^\/]*\/(cgi-bin|journal)(\/(abstract|summary))?\/[0-9]+\/abstract/); if (m){ return "journalArticle"; } }', 'function doWeb(doc, url){ var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var host = ''http://'' + doc.location.host + "/"; Zotero.debug(host); var m = url.match(/https?:\/\/[^\/]*\/(journal|cgi-bin\/summary)\/([0-9]+)\/(abstract)?/); var ids = new Array(); if(detectWeb(doc, url) == "multiple") { //search var id; var title; var availableItems = new Array(); var xpath = ''//tr[td/input[@name="ID"][@type="checkbox"]]''; if (doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { elmts = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var elmt = elmts.iterateNext(); do { title = doc.evaluate(''./td/strong'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; id = doc.evaluate(''./td/input[@name="ID"][@type="checkbox"]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().value; availableItems[id] = title; } while (elmt = elmts.iterateNext()) } else { var xpath = ''//div[@id="contentCell"]/div[*/a]''; var elmts = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var elmt = elmts.iterateNext(); do { title = Zotero.Utilities.trimInternal(doc.evaluate(''.//strong'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent); id = doc.evaluate(''.//a[1]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().href.match(/\/([\d]+)\/abstract/)[1]; availableItems[id] = title; } while (elmt = elmts.iterateNext()) } var items = Zotero.selectItems(availableItems); if(!items) { return true; } for(var id in items) { ids.push(id); } } else if (m){ //single article ids.push(m[2]); } var setupSets = []; for each (id in ids) { var uri = host + ''tools/citex''; var poststring = "clienttype=1&subtype=1&mode=1&version=1&id=" + id; setupSets.push({ id: id, uri: uri, poststring: poststring }); } var setupCallback = function () { if (setupSets.length) { var set = setupSets.shift(); Zotero.Utilities.HTTP.doPost(set.uri, set.poststring, function () { processCallback(set.id); }); } else { Zotero.done(); } } var processCallback = function (id) { var uri = host+"tools/CitEx"; var poststring = "mode=2&format=3&type=2&file=3&exportCitation.x=16&exportCitation.y=10&exportCitation=submit"; Zotero.Utilities.HTTP.doPost(uri, poststring, function(text) { var m = text.match(/%A\s(.*)/); //following lines fix Wiley''s incorrect %A tag (should be separate tags for each author) if (m){ var newauthors =""; var authors = m[1].split(",") for each (var author in authors){ if (author != ""){ newauthors = newauthors + "%A "+Zotero.Utilities.unescapeHTML(Zotero.Utilities.trimInternal(author))+"\n"; } } text = text.replace(/%A\s.*\n/, newauthors); } var translator = Zotero.loadTranslator("import"); translator.setTranslator("881f60f2-0802-411a-9228-ce5f47b64c7d"); //EndNote/Refer/BibIX translator.setString(text); translator.setHandler("itemDone", function(obj, item) { var pdfurl = ''http://download.interscience.wiley.com/cgi-bin/fulltext?ID='' + id + ''&PLACEBO=IE.pdf&mode=pdf''; item.attachments.push({url:pdfurl, title:"Wiley Interscience PDF", mimeType:"application/pdf"}); item.DOI = item.url.match(/\.org\/(.*)$/)[1]; item.complete(); }); translator.translate(); setupCallback(); }); } setupCallback(); Zotero.wait(); }'); REPLACE INTO translators VALUES ('b6d0a7a-d076-48ae-b2f0-b6de28b194e', '1.0.0b3.r1', '', '2008-12-15 05:30:00', 1, 100, 4, 'ScienceDirect', 'Michael Berkowitz', 'https?://[^/]*science-?direct\.com[^/]*/science(\/article)?(\?(?:.+\&|)ob=(?:ArticleURL|ArticleListURL|PublicationURL))?', 'function detectWeb(doc, url) { if ((url.indexOf("_ob=DownloadURL") != -1) || doc.title == "ScienceDirect Login") { return false; } if((!url.match("pdf") && url.indexOf("_ob=ArticleURL") == -1 && url.indexOf("/article/") == -1) || url.indexOf("/journal/") != -1) { return "multiple"; } else if (!url.match("pdf")) { return "journalArticle"; } }', 'function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; if (!doc.evaluate(''//div[@title = "Advertisement."]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var articles = new Array(); if(detectWeb(doc, url) == "multiple") { //search page var items = new Object(); var xpath; if (url.indexOf("_ob=PublicationURL") != -1) { // not sure if this case still arises. may need to be fixed at some point xpath = ''//table[@class="txt"]/tbody/tr/td[2]''; } else { xpath = ''//div[@class="font3"][@id="bodyMainResults"]/table/tbody/tr/td[2]/a''; } var rows = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var next_row; while (next_row = rows.iterateNext()) { var title = next_row.textContent; var link = next_row.href; if (!title.match(/PDF \(/) && !title.match(/Related Articles/)) items[link] = title; } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, function(newDoc) { var doi = newDoc.evaluate(''//div[@class="articleHeaderInner"][@id="articleHeader"]/a[contains(text(), "doi")]'', newDoc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.substr(4); var tempPDF = newDoc.evaluate(''//a[@class="noul" and div/div[contains(text(), "PDF")]]'', newDoc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if (!tempPDF) { // PDF xpath failed, lets try another tempPDF = newDoc.evaluate(''//a[@class="noul" and contains(text(), "PDF")]'', newDoc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if (!tempPDF) { // second PDF xpath failed set PDF to null to avoid item.attachments var PDF = null; } else { var PDF = tempPDF.href; // second xpath succeeded, use that link } } else { var PDF = tempPDF.href; // first xpath succeeded, use that link } var url = newDoc.location.href; var get = newDoc.evaluate(''//a[img[contains(@src, "exportarticle_a.gif")]]'', newDoc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().href; // if the PDF is available make it an attachment otherwise only use snapshot. if (PDF) { var attachments = [ {url:url, title:"ScienceDirect Snapshot", mimeType:"text/html"}, {url:PDF, title:"ScienceDirect Full Text PDF", mimeType:"application/pdf"} // Sometimes PDF is null...I hope that is ok ]; } else { var attachments = [ {url:url, title:"ScienceDirect Snapshot", mimeType:"text/html"}, ]; } Zotero.Utilities.HTTP.doGet(get, function(text) { var md5 = text.match(/<input type=hidden name=md5 value=([^>]+)>/)[1]; var acct = text.match(/<input type=hidden name=_acct value=([^>]+)>/)[1]; var userid = text.match(/<input type=hidden name=_userid value=([^>]+)>/)[1]; var uoikey = text.match(/<input type=hidden name=_uoikey value=([^>]+)>/)[1]; if (text.match(/<input type=hidden name=_ArticleListID value=([^>]+)>/)) { var alid = text.match(/<input type=hidden name=_ArticleListID value=([^>]+)>/)[1]; } if (alid) { var docID = "_ArticleListID=" + alid + "&_uoikey=" + uoikey; } else { var docID = "_uoikey=" + uoikey; } var post = "_ob=DownloadURL&_method=finish&_acct=" + acct + "&_userid=" + userid + "&_docType=FLA&" + docID + "&md5=" + md5 + "&count=1&JAVASCRIPT_ON=Y&format=cite-abs&citation-type=RIS&Export=Export&x=26&y=17"; var baseurl = url.match(/https?:\/\/[^/]+\//)[0]; Zotero.Utilities.HTTP.doPost(baseurl + ''science'', post, function(text) { var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { item.attachments = attachments; if(item.notes[0]) { item.abstractNote = item.notes[0].note; item.notes = new Array(); } if (doi) { item.DOI = doi; } item.complete(); }); translator.translate(); }, false, ''windows-1252''); }); }, function() {Zotero.done;}); } else { var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); if (url.indexOf("_ob=PublicationURL") != -1) { xpath = ''//table[@class="txt"]/tbody/tr[1]/td[2]''; // not sure whether this case still exists } else { xpath = ''//div[@class="font3"][@id="bodyMainResults"]/table/tbody/tr/td[2]/a''; } var rows = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var next_row; while (next_row = rows.iterateNext()) { var title = next_row.textContent; var link = next_row.href; items[link] = title; } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [url]; } Zotero.Utilities.processDocuments(articles, function(doc2) { var item = new Zotero.Item("journalArticle"); item.repository = "ScienceDirect"; item.url = doc2.location.href; var title = doc2.title.match(/^[^-]+\-([^:]+):(.*)$/); item.title = Zotero.Utilities.trimInternal(title[2]); item.publicationTitle = Zotero.Utilities.trimInternal(title[1]); voliss = doc2.evaluate(''//div[@class="pageText"][@id="sdBody"]/table/tbody/tr/td[1]'', doc2, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; if (voliss.match(/Volume\s+\d+/)) item.volume = voliss.match(/Volume\s+(\d+)/)[1]; if (voliss.match(/Issues?\s+[^,]+/)) item.issue = voliss.match(/Issues?\s+([^,]+)/)[1]; if (voliss.match(/(J|F|M|A|S|O|N|D)\w+\s+\d{4}/)) item.date = voliss.match(/(J|F|M|A|S|O|N|D)\w+\s+\d{4}/)[0]; if (voliss.match(/Pages?\s+[^,^\s]+/)) item.pages = voliss.match(/Pages?\s+([^,^\s]+)/)[1]; item.DOI = doc2.evaluate(''//div[@class="articleHeaderInner"][@id="articleHeader"]/a[contains(text(), "doi")]'', doc2, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.substr(4); var abspath = ''//div[@class="articleHeaderInner"][@id="articleHeader"]/div[@class="articleText"]/p''; var absx = doc2.evaluate(abspath, doc2, nsResolver, XPathResult.ANY_TYPE, null); var ab; item.abstractNote = "" while (ab = absx.iterateNext()) { item.abstractNote += Zotero.Utilities.trimInternal(ab.textContent) + " "; } if (item.abstractNote.substr(0, 7) == "Summary") { item.abstractNote = item.abstractNote.substr(9); } var tagpath = ''//div[@class="articleText"]/p[strong[starts-with(text(), "Keywords:")]]''; if (doc2.evaluate(tagpath, doc2, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { if (doc2.evaluate(tagpath, doc2, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.split(":")[1]) { var tags = doc2.evaluate(tagpath, doc2, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.split(":")[1].split(";"); for (var i in tags) { item.tags.push(Zotero.Utilities.trimInternal(tags[i])); } } } item.attachments.push({url:doc2.location.href, title:"ScienceDirect Snapshot", mimeType:"text/html"}); Zotero.Utilities.HTTP.doGet(item.url, function(text) { var aus = text.match(/<strong>\s+<p>.*<\/strong>/)[0].replace(/<sup>/g, "$").replace(/<\/sup>/g, "$"); aus = aus.replace(/\$[^$]*\$/g, ""); aus = aus.replace(/<a[^>]*>/g, "$").replace(/<\/a[^>]*>/g, "$"); aus = aus.replace(/\$[^$]*\$/g, ""); aus = Zotero.Utilities.cleanTags(aus); aus = aus.split(/(,|and)/); for (var a in aus) { if (aus[a] != "," && aus[a] != "and" && aus[a].match(/\w+/)) { item.creators.push(Zotero.Utilities.cleanAuthor(Zotero.Utilities.trimInternal(aus[a]), "author")); } } item.complete(); }); }, function() {Zotero.done;}); } Zotero.wait(); }'); REPLACE INTO translators VALUES ('19643c25-a4b2-480d-91b7-4e0b761fb6ad', '1.0.0b3.r1', '', '2007-03-16 03:00:00', '1', '100', '4', 'ScientificCommons', 'Sean Takats', '^http://(?:en|de|www)\.scientificcommons\.org', 'function detectWeb(doc, url) { var articleRe = /^http:\/\/(?:www|en|de)\.scientificcommons\.org\/([0-9]+)/; var m = articleRe.exec(url); if(m) { return "journalArticle"; } else { var frontRe = /^http:\/\/(?:www|en|de)\.scientificcommons\.org\/$/; if(frontRe.test(url)) return "multiple"; var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var listElt = doc.evaluate(''//div[@id="content_search_details"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if (listElt) return "multiple"; } return false; }', 'function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var hostRe = new RegExp("^(http://[^/]+)/"); var m = hostRe.exec(url); var host = m[1]; var articleRe = /^http:\/\/(?:www|en|de)\.scientificcommons\.org\/([0-9]+)/; m = articleRe.exec(url); var uris = new Array(); if(m) { var idElt = doc.evaluate(''//div[@id="publication_id"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if (idElt) { uris.push(host + "/export/ris/" + idElt.textContent); } else { return false; } } else { var items = new Array(); var listElts = doc.evaluate(''//div[@class="content_element"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var id; var link; var title; while (listElt = listElts.iterateNext()) { id = doc.evaluate(''./@id'', listElt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().nodeValue; link = host + "/export/ris/" + id; title = doc.evaluate(''.//p[@class="title"]'', listElt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; items[link] = Zotero.Utilities.cleanString(title); } items = Zotero.selectItems(items); if(!items) return true; for(var uri in items) { uris.push(uri); } } Zotero.Utilities.HTTP.doGet(uris, function(text) { // load translator for RIS var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { // add attachment support? item.complete(); }); translator.translate(); Zotero.done(); }); Zotero.wait(); }'); REPLACE INTO translators VALUES ('d75381ee-7d8d-4a3b-a595-b9190a06f43f', '1.0.0b3.r1', '', '2008-09-02 13:40:00', '0', '100', '4', 'Scitation', 'Eugeniy Mikhailov', '^https?://(?:www\.)?scitation.aip.org', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var multids = doc.evaluate(''//tr/td/input[@type="checkbox" and @name="SelectCheck"]'',doc, nsResolver, XPathResult.ANY_TYPE, null); var singid = doc.evaluate(''//input[@type="hidden" and @name="SelectCheck"]'',doc, nsResolver, XPathResult.ANY_TYPE, null); if (multids.iterateNext()){ return "multiple"; } else if (singid.iterateNext()){ return "journalArticle"; } }', 'function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var multids = doc.evaluate(''//tr/td/input[@type="checkbox" and @name="SelectCheck"]'',doc, nsResolver, XPathResult.ANY_TYPE, null); var singids = doc.evaluate(''//input[@type="hidden" and @name="SelectCheck"]'',doc, nsResolver, XPathResult.ANY_TYPE, null); var multid; var singid; var getstring = "/getabs/servlet/GetCitation?PrefType=ARTICLE&PrefAction=Add+Selected&fn=open_isi&source=scitation&downloadcitation=+Go+"; if (multid = multids.iterateNext()){ var titles = new Array(); var ids = new Array(); var items = new Array(); var title; do { title = doc.evaluate(''../..//a[1]'',multid, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); items[multid.value] = Zotero.Utilities.cleanString(title.textContent); } while (multid =multids.iterateNext()); items = Zotero.selectItems(items); if(!items) return true; for(var i in items) { getstring = getstring + "&SelectCheck=" + i; } } else if (singid = singids.iterateNext()){ getstring = getstring + "&SelectCheck=" + singid.value; } var hostRe = new RegExp("^(https?://[^/]+)/"); var m = hostRe.exec(url); var host = m[1]; var newuri = host + getstring; Zotero.Utilities.HTTP.doGet(newuri, function(text) { // load translator for RIS var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { var doi = text.match(/ER\s{2}\-\s.*org\/(.*)\n/)[1]; if (doi) item.DOI = doi; item.complete(); }); translator.translate(); Zotero.done(); }); Zotero.wait(); }'); REPLACE INTO translators VALUES ('b56d756e-814e-4b46-bc58-d61dccc9f32f', '1.0.10', '', '2009-01-11 02:17:07', 1, 100, 4, 'Nagoya University OPAC', 'Frank Bennett', '^http://opac.nul.nagoya-u.ac.jp/', 'function detectWeb(doc, url) { if (url.match(/.*[^A-Za-z0-9]ID=[A-Z0-9].*$/)) { var journal_test = doc.evaluate( ''//td[contains(text(),"frequency of publication") or contains(text(),"σ╖╗µ¼íπâ╗σ╣┤µ£êµ¼í")]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext(); if (!journal_test) { return "book"; } } }', '/* * Set the texts used to find raw citation elements */ function setSpec() { var spec = new Array(); spec[''title''] = [''Θíîπüèπéêπü│'',''title and statement'']; spec[''year''] = [''σç║τëêπâ╗ΘáÆσ╕â'',''publication,distribution'']; spec[''isbn''] = [''σ¢╜ΘÜ¢µ¿Öµ║ûσ¢│µ¢╕'',''international standard book'']; spec[''authors''] = [''ΦæùΦÇൿÖτ¢«'',''author link'']; spec[''series''] = [''µ¢╕Φ¬îµºïΘÇá'',''parent bibliography'']; return spec; } /* * Extract raw string sets from the page. This is the only function that uses * xpath. The string sets retrieved for each label registered by setSpec is * stored as a list, to cope with the possibility of multiple instances of the * same label with different data. */ function getData(doc, spec) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var data = new Object(); for (key in spec) { var check = doc.evaluate("//td[contains(text(),''"+spec[key][0]+"'') or contains(text(),''"+spec[key][1]+"'')]/following-sibling::td", doc, nsResolver, XPathResult.ANY_TYPE, null); var c = check.iterateNext(); while (c) { if (!data[key] ) { data[key] = new Array(); } data[key].push(Zotero.Utilities.cleanString(c.textContent)); c = check.iterateNext(); } } return data; } /* * Chop a semicolon-delimited string of authors out of a raw title string, * check it for Japanese characters, and save the raw string for each author * to an array. If no Japanese authors were found, save directly to the item * object. */ parseRomanAuthors = function (item,data) { var datastring = data[''title''][0]; // don''t bother if there is no author info if ( ! datastring.match(/.*\/.*/) ) { return true; } // cut off the title datastring = datastring.replace(/.*\//, ""); // raise flag if there are japanese characters var japanese_check = datastring.match(/.*[^- &0-9()\[\];:,.a-zA-Z].*/); // replace comma with semicolon in certain cases, to prepare for split datastring = datastring.replace(/,(\s+[a-zA-Z]{3,})/, ";$1"); datastring = datastring.replace(/,(\s+[a-zA-Z]{1}[^a-zA-Z])/, ";$1"); datastring = datastring.replace(/(\s+and\s+)/, "; "); datastring = datastring.replace(/(\s+&\s+)/, "; "); // split the authors var authors = datastring.replace(/\|.*/, "").split(";"); // this is parsing the authors for a single work. if there is a special byline, we // assume that it applies to all subsequent entries until overridden. var authortype = ''author''; for (i in authors) { item.authorstrings.push(authors[i]); var authortypehint = authors[i].replace(/^([ ,.:a-z]*).*/, "$1"); if ( authortypehint.match(/.*(edit|organiz).*/) ) { authortype = "editor"; } else if ( authortypehint.match(/.*trans.*/) ) { authortype = "translator"; } author = authors[i].replace(/^[ a-z]*/, "").replace( /\.\.\..*/, "" ); // need to test for length because the replacement of commas with semicolons // can cause a short split at the end of a byline that originally ended in a comma if ( ! japanese_check && author.length ) { item.creators.push(Zotero.Utilities.cleanAuthor(author, authortype)); } } return japanese_check; } /* * For each author link, attempt to find a hint that the person * is an editor or translator, first in the link text itself, then in * the list of raw author strings captured by parseRomanAuthors. * Clean out cruft, reverse the order of each name, and save * directly to the item object. */ parseJapaneseAuthors = function ( item, data ) { var authortype = author; var authors = data[''authors'']; for (i in authors ) { if ( authors[i].match(/.*τ╖¿.*/) ) { authortype = ''editor''; } else if ( authors[i].match(/.*Φ¿│.*/) ) { authortype = ''translator''; } else { authortype = ''author''; } var author = authors[i].replace(/[*]/g,"").replace(/[0-9<()|].*/, "").replace(/(.*?),(.*)/, "$2 $1"); // If we claim to be an author, double-check in the English entries for a translator hint. // This is an enormous pain, but the original records are a mess, with different conventions // for Japanese and foreign records, sometimes mixed up in the same entry. What are you // going to do. for ( x in item.authorstrings ) { var authorstring = item.authorstrings[x]; Zotero.debug(authorstring); var name = author.split(" "); name.reverse(); if ( authorstring.indexOf( name[0] ) > -1 && authorstring.match(/.*(Φ¿│|Φ¡»|Φ¡»Φ¿╗)$/) ) { authortype = ''translator''; break; } else if ( authorstring.indexOf( name[0] ) > -1 && authorstring.match(/.*(τ╖¿|τ╖¿Φæù)$/) ) { authortype = ''editor''; break; } } delete item.authorstrings; item.creators.push(Zotero.Utilities.cleanAuthor(author, authortype)); } } /* * Split extracted title field. This always starts as a single list item, * but can contain entries for several works, as in an omnibus volume of * translated works, for example. Such records separate the elements of * the omnibus with periods that have no trailing space, so we use that as * the split point. We discard the phonetic information appended to the end * of the string in Japanese records. */ function splitTitle(data) { // split in data array var titlestring = data[''title''][0].replace(/\|.*/, ""); data[''title''] = titlestring.split(" . "); } /* * The scrape function brings the various parsing functions together */ function scrape(doc,url) { var item = new Zotero.Item("book"); item.authorstrings = new Array(); var spec = setSpec(); var data = getData(doc, spec); splitTitle(data); if (data[''title'']) { var titles = new Array(); for (i in data[''title'']) { titles.push( data[''title''][i].replace(/\s*\/.*/, "") ); } item.title = titles.join(", "); jse_authors = parseRomanAuthors( item, data ); if ( jse_authors ) { parseJapaneseAuthors( item, data ); } } if (data[''year'']) { // sometimes there are multiple "date" fields, some of which are filled // with other random information for (i in data[''year'']) { var year = data[''year''][i]; if ( year.match(/.*[0-9]{3}.*/) ) { item.date = year.replace(/.*?([0-9][.0-9][0-9]+).*/, "$1"); item.place = year.replace(/:.*/, "").replace(/[\[\]]/g, ""); item.publisher = year.replace(/.*:(.*),.*/, "$1"); break; } } } if (data[''series'']) { item.series = data[''series''][0].replace(/<.*/, ""); } if (data[''isbn'']) { item.ISBN = data[''isbn''][0].replace(/[^0-9]*([0-9]+).*/, "$1"); } item.complete(); } function doWeb(doc, url) { articles = [url]; Zotero.Utilities.processDocuments(articles, scrape, function() { Zotero.done(); }); Zotero.wait(); }'); REPLACE INTO translators VALUES ('2c310a37-a4dd-48d2-82c9-bd29c53c1c76', '1.0.0b3.r1', '', '2008-04-12 18:40:00', '1', '100', '4', 'PROLA', 'Eugeniy Mikhailov and Michael Berkowitz', 'https?://(?:www\.)?prola.aps.org/(toc|searchabstract|abstract)/', 'function detectWeb(doc, url) { if (url.indexOf("toc") != -1) { return "multiple"; } else { return "journalArticle"; } } ', 'function doWeb(doc, url) { var arts = new Array(); if (detectWeb(doc, url) == "multiple") { var items = Zotero.Utilities.getItemArray(doc, doc, "(abstract|abstractsearch)"); items = Zotero.selectItems(items); for (var i in items) { arts.push(i); } } else { arts = [url]; } Zotero.Utilities.processDocuments(arts, function(newDoc) { Zotero.debug(newDoc.title); var abs = Zotero.Utilities.trimInternal(newDoc.evaluate(''//div[contains(@class, "aps-abstractbox")]/p'', newDoc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); var urlRIS = newDoc.location.href; // so far several more or less identical url possible // one is with "abstract" other with "searchabstract" urlRIS = urlRIS.replace(/(searchabstract|abstract)/,"export"); var post = "type=ris"; var snapurl = newDoc.location.href; var pdfurl = snapurl.replace(/(searchabstract|abstract)/, "pdf"); Zotero.Utilities.HTTP.doPost(urlRIS, post, function(text) { // load translator for RIS var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { if (item.itemID) { item.DOI = item.itemID; } item.attachments = [ {url:snapurl, title:"PROLA Snapshot", mimeType:"text/html"}, {url:pdfurl, title:"PROLA Full Text PDF", mimeType:"application/pdf"} ]; item.abstractNote = abs; item.complete(); }); translator.translate(); }); }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('cde4428-5434-437f-9cd9-2281d14dbf9', '1.0.0b3.r1', '', '2008-05-08 20:30:00', '1', '100', '4', 'Ovid', 'Simon Kornblith and Michael Berkowitz', '/(gw2|spa|spb)/ovidweb\.cgi', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var results = doc.evaluate(''//div[@class="bibheader-resultsrange"]/b'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if(results) { results = Zotero.Utilities.cleanString(results.textContent); if(results.indexOf("-") != -1) { return "multiple"; } else { return "journalArticle"; } } return false; }', 'function senCase(string) { var words = string.split(/\b/); for (var i = 0 ; i < words.length ; i++) { if (words[i].match(/[A-Z]/)) { words[i] = words[i][0] + words[i].substring(1).toLowerCase(); } } return words.join(""); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var results = Zotero.Utilities.cleanString(doc.evaluate(''//div[@class="bibheader-resultsrange"]/b'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent); var post = "S="+doc.evaluate(''.//input[@name="S"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().value; if(results.indexOf("-") != -1) { var items = new Object(); // Go through table rows if (doc.evaluate(''/html/body/form/div[substring(@class, 1, 10)="titles-row"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var tableRows = doc.evaluate(''/html/body/form/div[substring(@class, 1, 10)="titles-row"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); } else if (doc.evaluate(''//div[@id="titles-records"]/table[@class="titles-row"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var tableRows = doc.evaluate(''//div[@id="titles-records"]/table[@class="titles-row"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); } var tableRow; while(tableRow = tableRows.iterateNext()) { var id = doc.evaluate(''.//input[@name="R"]'', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().value; items[id] = Zotero.Utilities.cleanString(doc.evaluate(''.//span[@class="titles-title"]'', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent); } var items = Zotero.selectItems(items); if(!items) return true; for(var i in items) { post += "&R="+i; } } else { var id = doc.evaluate(''.//input[@name="R"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().value; post += "&R="+id; } if (detectWeb(doc, url) == "multiple") { var selectvar = doc.evaluate(''.//input[@name="SELECT"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var nextselect = selectvar.iterateNext().value; if (next = selectvar.iterateNext()) { post += "&SELECT=" + next.value; } else { post += "&SELECT="+ nextselect; } } else { post += "&SELECT=" + doc.evaluate(''.//input[@name="SELECT"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().value; } post += "&CitMan="+doc.evaluate(''.//input[@name="CitMan"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().value; post += "&CitManPrev="+doc.evaluate(''.//input[@name="CitManPrev"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().value; post += "&cmRecordSelect=SELECTED&cmFields=ALL&cmFormat=export&cmsave.x=12&cmsave.y=7"; Zotero.Utilities.HTTP.doPost(url, post, function(text) { var lines = text.split("\n"); var haveStarted = false; var newItemRe = /^<[0-9]+>/; var newItem = new Zotero.Item("journalArticle"); for(var i in lines) { if(lines[i].substring(0,3) == "<1>") { haveStarted = true; } else if(newItemRe.test(lines[i])) { newItem.complete(); newItem = new Zotero.Item("journalArticle"); } else if(lines[i].substr(2, 4) == " - " && haveStarted) { var fieldCode = lines[i].substr(0, 2); var fieldContent = Zotero.Utilities.cleanString(lines[i].substr(6)); if(fieldCode == "TI") { newItem.title = fieldContent.replace(/\. \[\w+\]$/, ""); } else if(fieldCode == "AU") { var names = fieldContent.split(", "); if(names.length >= 2) { // get rid of the weird field codes if(names.length == 2) { names[1] = names[1].replace(/ [\+\*\S\[\]]+$/, ""); } names[1] = names[1].replace(/ (?:MD|PhD|[BM]Sc|[BM]A|MPH|MB)$/i, ""); newItem.creators.push({firstName:names[1], lastName:names[0], creatorType:"author"}); } else { newItem.creators.push({lastName:names[0], isInstitution:true, creatorType:"author"}); } } else if(fieldCode == "SO") { if (fieldContent.match(/\d{4}/)) { newItem.date = fieldContent.match(/\d{4}/)[0]; } if (fieldContent.match(/(\d+)\((\d+)\)/)) { var voliss = fieldContent.match(/(\d+)\((\d+)\)/); newItem.volume = voliss[1]; newItem.issue = voliss[2]; } if (fieldContent.match(/\d+\-\d+/)) newItem.pages = fieldContent.match(/\d+\-\d+/)[0]; if (fieldContent.match(/[J|j]ournal/)) { newItem.publicationTitle = fieldContent.match(/[J|j]ournal[-\s\w]+/)[0]; } else { newItem.publicationTitle = Zotero.Utilities.trimInternal(fieldContent.split(/(\.|;)/)[0]); } } else if(fieldCode == "SB") { newItem.tags.push(Zotero.Utilities.superCleanString(fieldContent)); } else if(fieldCode == "KW") { newItem.tags.push(fieldContent.split(/; +/)); } else if(fieldCode == "DB") { newItem.repository = "Ovid ("+fieldContent+")"; } else if(fieldCode == "DI") { newItem.DOI = fieldContent; } else if(fieldCode == "AB") { newItem.abstractNote = fieldContent; } } } // last item is complete if(haveStarted) { newItem.complete(); } }); Zotero.wait(); }'); REPLACE INTO translators VALUES ('cb48083-4d9-4ed-ac95-2e93dceea0ec', '1.0.0b3.r1', '', '2008-04-28 17:50:00', '1', '100', '4', 'Blackwell Synergy', 'Michael Berkowitz', 'https?://www\.blackwell-synergy\.com[^/]*/(?:action/doSearch|doi/|links/doi/)', 'function detectWeb(doc, url) { if(url.indexOf("doSearch") != -1) { return "multiple"; } else { return "journalArticle"; } }', 'function titleCase(str) { var skipWords = ["but", "or", "yet", "so", "for", "and", "nor", "a", "an", "the", "at", "by", "from", "in", "into", "of", "on", "to", "with", "up", "down", "as"]; var words = str.toLowerCase().split(/\s+/); var newstr = ""; for each (var word in words) { if (skipWords.indexOf(word.replace(/[^a-zA-Z]+/, "")) != -1) { newstr += " " + word; } else if (word.indexOf("-") != -1) { newword = word.split("-"); newstr += " " + newword[0][0].toUpperCase() + newword[0].substr(1) + "-" + newword[1][0].toUpperCase() + newword[1].substr(1); } else { newstr += " " + word[0].toUpperCase() + word.substr(1); } } return Zotero.Utilities.trimInternal(newstr); } function doWeb(doc, url) { var host = doc.location.host; var articles = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var rows = doc.evaluate(''//div[@class="toc_item"]'', doc, null, XPathResult.ANY_TYPE, null); var row; while (row = rows.iterateNext()) { var title = Zotero.Utilities.trimInternal(doc.evaluate(''.//label'', row, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); var id = doc.evaluate(''.//input[@name="doi"]'', row, null, XPathResult.ANY_TYPE, null).iterateNext().value; items[id] = title; } items = Zotero.selectItems(items); for (var i in items) { articles.push(i); } } else { articles = [decodeURIComponent(url).match(/doi\/(abs\/)?([^\?]+)(\?|$)/)[2]]; } var post = ""; for each (var doi in articles) { post += "doi=" + encodeURIComponent(doi) + "&" } post += "include=abs&format=refman&submit=Download+references"; Zotero.Utilities.HTTP.doPost(''http://www.blackwell-synergy.com/action/downloadCitation'', post, function(text) { text = text.replace(/(Y1\s+\-\s+)(\d{4}\/\d{2}).*\n/, "$1$2\n"); var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { item.DOI = Zotero.Utilities.trimInternal(item.notes[0][''note''].substr(4)); item.notes = new Array(); item.attachments = [ {url:item.url, title:"Blackwell Synergy Snapshot", mimeType:"text/html"}, {url:item.url.replace(/\/\/[^/]*/, "//" + host).replace("/doi/abs", "/doi/pdf"), title:"Blackwell Synergy Full Text PDF", mimeType:"application/pdf"} ]; // use fulltext if possible var oldCreators = item.creators; item.creators = [] for each (var author in oldCreators) { if (author["lastName"] != "") { item.creators.push({firstName:titleCase(author.firstName), lastName:titleCase(author.lastName), creatorType:"author"}); } } item.title = titleCase(item.title); item.complete(); }); translator.translate(); Zotero.done(); }); }'); REPLACE INTO translators VALUES ('df966c80-c199-4329-ab02-fa410c8eb6dc', '1.0.0b3.r1', '', '2009-02-25 07:15:00', 1, 100, 4, 'University of Chicago', 'Sean Takats', 'https?://[^/]*journals\.uchicago\.edu[^/]*/(?:doi/abs|doi/full|toc|action/doSearch)', 'function detectWeb(doc, url) { if(url.indexOf("toc") != -1) { return "multiple"; } else if(url.match("doSearch")) { return "multiple"; } else { return "journalArticle"; } }', 'function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var proxyURL =""; var proxyRe = /http:\/\/([^\/]*)/; var m = proxyRe.exec(doc.location.href); if(m) { proxyURL = m[1]; } var post = ""; var fulltext = new Object(); if(url.indexOf("toc") != -1) { var items = new Array(); var links = new Array(); var tableRows = doc.evaluate(''//li[div[@class="articleListing_col3"]/label][//input[@name="doi"]]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var tableRow; // Go through table rows while(tableRow = tableRows.iterateNext()) { var id = doc.evaluate(''.//input[@name="doi"]'', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().value; items[id] = Zotero.Utilities.trimInternal(doc.evaluate(''.//label'', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent); } var items = Zotero.selectItems(items); if(!items) return true; // find all fulltext links so we can determine where we can scrape the fulltext article var fulltextLinks = doc.evaluate(''//a[starts-with(text(), "Full Text")]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var fulltextLink; while(fulltextLink = fulltextLinks.iterateNext()) { links.push(fulltextLink.href.toString()); } for(var i in items) { post += "doi="+encodeURIComponent(i)+"&"; // check for fulltext links for each(var link in links) { if(link.indexOf(i) != -1) { fulltext[i] = true; break; } } } } else if(url.match("doSearch")) { // do search result, yes lots of duped code, please forgive var items = new Array(); var links = new Array(); var tableRows = doc.evaluate(''//li[div[@class="articleResult_col2"]/h3/label][//input[@name="doi"]]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var tableRow; // Go through table rows while(tableRow = tableRows.iterateNext()) { var id = doc.evaluate(''.//input[@name="doi"]'', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().value; items[id] = Zotero.Utilities.trimInternal(doc.evaluate(''.//label'', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent); } var items = Zotero.selectItems(items); if(!items) return true; // find all fulltext links so we can determine where we can scrape the fulltext article var fulltextLinks = doc.evaluate(''//a[starts-with(text(), "Full Text")]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var fulltextLink; while(fulltextLink = fulltextLinks.iterateNext()) { links.push(fulltextLink.href.toString()); } for(var i in items) { post += "doi="+encodeURIComponent(i)+"&"; // check for fulltext links for each(var link in links) { if(link.indexOf(i) != -1) { fulltext[i] = true; break; } } } } else { var m = url.match(/https?:\/\/[^\/]+\/doi\/[^\/]+\/([^\?]+)(\?|$)/); if (m) { var doi = m[1]; } else { m = url.match(/https?:\/\/[^\/]+\/links\/doi\/([^\?]+)(\?|$)/); var doi = m[1]; } post += "doi="+encodeURIComponent(doi)+"&"; if(url.indexOf("doi/full") != -1 || doc.evaluate(''//img[@alt="Full Text Article"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { fulltext[doi] = true; } } post += "include=cit&downloadFileName=deadbeef&format=refman&direct=on&submit=Download+article+citation+data"; Zotero.Utilities.HTTP.doPost("http://www.journals.uchicago.edu/action/downloadCitation", post, function(text) { // load translator for RIS var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { item.attachments = [ {url:item.url.replace("www.journals.uchicago.edu", proxyURL), title:"University of Chicago Journals Snapshot", mimeType:"text/html"}, {url:item.url.replace("www.journals.uchicago.edu", proxyURL).replace("/doi/abs", "/doi/pdf"), title:"University of Chicago Full Text PDF", mimeType:"application/pdf"} ]; if (item.notes[0][''note'']) item.DOI = Zotero.Utilities.trimInternal(item.notes[0][''note''].substr(4)); item.notes = new Array(); // use fulltext if possible if(fulltext[item.DOI]) { item.attachments[0].url = item.attachments[0].url.replace("/doi/abs", "/doi/full"); } item.complete(); }); translator.translate(); Zotero.done(); }); Zotero.wait(); }'); REPLACE INTO translators VALUES ('f8765470-5ace-4a31-b4bd-4327b960ccd', '1.0.0b3.r1', '', '2008-04-12 18:40:00', '1', '100', '4', 'SpringerLink', 'Simon Kornblith and Michael Berkowitz', 'https?://(www\.)*springerlink\.com|springerlink.metapress.com[^/]*/content/', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; if((doc.title == "SpringerLink - All Search Results") || (doc.title == "SpringerLink - Journal Issue")) { return "multiple"; } else if(doc.title == "SpringerLink - Book Chapter") { return "bookSection"; } else if (doc.title == "SpringerLink - Book") { return "book"; } else if (doc.title == "SpringerLink - Journal Article") { return "journalArticle"; } else if(doc.evaluate(''//a[text() = "RIS"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { return "journalArticle"; } }', 'function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var m = url.match(/https?:\/\/[^\/]+/); var host = m[0]; if(detectWeb(doc, url) == "multiple") { var items = new Object(); if (doc.title == "SpringerLink - Journal Issue") { var items = Zotero.Utilities.getItemArray(doc, doc.getElementsByTagName("table")[8], ''/content/[^/]+/\\?p=[^&]+&pi=''); } else { var results = doc.evaluate(''//div[@class="listItemName"]/a'', doc, nsResolver, XPathResult.ANY_TYPE, null); var result; while (result = results.iterateNext()) { items[result.href] = Zotero.Utilities.trimInternal(result.textContent); } } items = Zotero.selectItems(items); if(!items) return true; var urls = new Array(); for(var url in items) { urls.push(url); } } else { var urls = [url]; } var RIS = new Array(); for each(var item in urls) { var m = item.match(/\/content\/([^/]+)/); RIS.push(host+"/export.mpx?code="+m[1]+"&mode=ris"); } Zotero.Utilities.HTTP.doGet(RIS, function(text) { // load translator for RIS text = text.replace("CHAPTER", "CHAP"); var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { var url = urls.shift(); var m = url.match(/https?:\/\/[^\/]+\/content\/[^\/]+\/?/); item.attachments = [ {url:url, title:"SpringerLink Snapshot", mimeType:"text/html"}, {url:m[0]+"fulltext.pdf", title:"SpringerLink Full Text PDF", mimeType:"application/pdf"} ]; var oldCreators = item.creators; item.creators = new Array(); for each (var creator in oldCreators) { if (creator[''lastName''] + creator[''firstName''] != "") { var fName = creator[''firstName''] ? creator[''firstName''] : ""; item.creators.push({firstName:Zotero.Utilities.trimInternal(fName), lastName:creator[''lastName''], creatorType:"author"}); } } // fix incorrect chapters if(item.publicationTitle && item.itemType == "book") item.title = item.publicationTitle; // fix "V" in volume if(item.volume) { item.volume = item.volume.replace("V", ""); } item.complete(); }); translator.translate(); }, function() { Zotero.done() }); Zotero.wait(); }'); REPLACE INTO translators VALUES ('6614a99-479a-4524-8e30-686e4d66663e', '1.0.0b3.r1', '', '2008-03-26 03:00:00', '1', '100', '4', 'Nature', 'Simon Kornblith', 'https?://www\.nature\.com[^/]*/(?:[^/]+/journal/v[^/]+/n[^/]+/(?:(?:full|abs)/.+\.html|index.html)|search/executeSearch)', 'function detectWeb(doc, url) { var articleRe = /(https?:\/\/[^\/]+\/[^\/]+\/journal\/v[^\/]+\/n[^\/]+\/)(full|abs)(\/.+\.)html/; if (articleRe.test(url)) { if (doc.evaluate(''//a[contains(@href, ".ris")]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { return "journalArticle"; } else { return false; } } else { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var tableRows = doc.evaluate(''//*[@class="atl"] | //*[@class="articletitle"] | //h4[@class="norm"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var fulltextLinks = doc.evaluate(''//a[text() = "Full Text"] | //a[text() = "Full text"] | //a[text() = "Full Text "]'', doc, nsResolver, XPathResult.ANY_TYPE, null); if(tableRows.iterateNext() && fulltextLinks.iterateNext()) { return "multiple"; } } return false; }', 'function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articleRe = /(https?:\/\/[^\/]+\/[^\/]+\/journal\/v[^\/]+\/n[^\/]+\/)(full|abs)(\/.+)\.html/; var m = articleRe.exec(url); if(!m) { // search page var items = new Array(); var tableRows = doc.evaluate(''//*[@class="atl"] | //*[@class="articletitle"] | //h4[@class="norm"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var fulltextLinks = doc.evaluate(''//a[text() = "Full Text"] | //a[text() = "Full text"] | //a[text() = "Full Text "]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var tableRow, fulltextLink; while((tableRow = tableRows.iterateNext()) && (fulltextLink = fulltextLinks.iterateNext())) { items[fulltextLink.href] = Zotero.Utilities.cleanString(tableRow.textContent); } items = Zotero.selectItems(items); if(!items) return true; var urls = new Array(); for(var url in items) { urls.push(url); } } else { var urls = [url]; } var RIS = new Array(); var regexps = new Array(); for each(var item in urls) { var m = articleRe.exec(item); if(m[3][m[3].length-2] == "_") { m[3] = m[3].substr(0, m[3].length-2); } RIS.push(m[1]+"ris"+m[3]+".ris"); regexps.push(m); } Zotero.Utilities.HTTP.doGet(RIS, function(text) { var url = urls.shift(); // load translator for RIS var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { var m = regexps.shift(); item.attachments = [ {url:m[0], title:"Nature Snapshot", mimeType:"text/html"}, {url:m[1]+"pdf"+m[3]+".pdf", title:"Nature Full Text PDF", mimeType:"application/pdf"} ] item.notes = new Array(); if (item.date) item.date = item.date.replace("print ", ""); item.complete(); }); translator.translate(); }, function() { Zotero.done(); }); Zotero.wait(); }'); REPLACE INTO translators VALUES ('92d4ed84-8d0-4d3c-941f-d4b9124cfbb', '1.0.0b3.r1', '', '2008-10-20 17:35:00', '1', '100', '4', 'IEEE Xplore', 'Simon Kornblith and Michael Berkowitz', 'https?://[^/]*ieeexplore.ieee.org[^/]*/(?:[^\?]+\?(?:|.*&)arnumber=[0-9]+|search/(?:searchresult.jsp|selected.jsp))', 'function detectWeb(doc, url) { var articleRe = /[?&]ar(N|n)umber=([0-9]+)/; var m = articleRe.exec(url); if(m) { return "journalArticle"; } else { return "multiple"; } return false; }', 'function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var articleRe = /[?&]ar(N|n)umber=([0-9]+)/; var m = articleRe.exec(url); if(detectWeb(doc, url) == "multiple") { // search page var items = new Array(); var tableRows = doc.evaluate(''//table[tbody/tr/td/div/strong]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var tableRow; while(tableRow = tableRows.iterateNext()) { var link = doc.evaluate(''.//a[@class="bodyCopy"]'', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().href; var title = ""; var strongs = tableRow.getElementsByTagName("strong"); for each(var strong in strongs) { if(strong.textContent) { title += strong.textContent+" "; } } items[link] = Zotero.Utilities.cleanString(title); } items = Zotero.selectItems(items); if(!items) return true; var urls = new Array(); for(var url in items) { urls.push(url); } } else { var urls = [url]; } var arnumber = ""; for each(var url in urls) { var m = articleRe.exec(url); arnumber = "%3Carnumber%3E"+m[2]+"%3C%2Farnumber%3E"; var post = "dlSelect=cite_abs&fileFormate=ris&arnumber="+arnumber+"&x=5&y=10"; var isRe = /[?&]isnumber=([0-9]+)/; var puRe = /[?&]punumber=([0-9]+)/; Zotero.Utilities.HTTP.doPost("http://ieeexplore.ieee.org/xpls/citationAct", post, function(text) { // load translator for RIS var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { var url = urls.shift(); var is = isRe.exec(url); var pu = puRe.exec(url); var arnumber = articleRe.exec(url); if(item.notes[0] && item.notes[0].note) { item.abstractNote = item.notes[0].note; item.notes = new Array(); } var dupes = new Array(); for (var i = 0 ; i < item.creators.length - 1 ; i++) { if (item.creators[i].lastName + item.creators[i].firstName == item.creators[i+1].lastName + item.creators[i].firstName) { dupes.push(i + 1); } } for (var i in dupes) { delete item.creators[dupes[i]]; } var dupes = []; for (var i = 0 ; i < item.creators.length ; i++) { if (item.creators[i]) { dupes.push(item.creators[i]); } } item.creators = dupes; var newurls = [url]; Zotero.Utilities.processDocuments(newurls, function(newDoc) { var xpath = ''//p[@class="bodyCopyBlackLargeSpaced"]''; var textElmt = newDoc.evaluate(xpath, newDoc, namespace, XPathResult.ANY_TYPE, null).iterateNext(); if (textElmt) { var m = textElmt.textContent.match(/Identifier:\s+([^\n]*)\n/); if (m){ item.DOI = m[1]; } } var pdfpath = ''//td[2][@class="bodyCopyBlackLarge"]/a[@class="bodyCopy"][substring(text(), 1, 3) = "PDF"]''; var pdfurlElmt = newDoc.evaluate(pdfpath, newDoc, namespace, XPathResult.ANY_TYPE, null).iterateNext(); if (pdfurlElmt) { pdfurlElmt.href = pdfurlElmt.href.substr(0,32) + ''PDF/getPDF'' + pdfurlElmt.href.substr(38); item.attachments = [{url:pdfurlElmt.href, title:"IEEE Xplore Full Text PDF", mimeType:"application/pdf"}]; } item.complete(); }, function() {Zotero.done;}); }); translator.translate(); }); } Zotero.wait(); }'); REPLACE INTO translators VALUES ('7bdb79e-a47f-4e3d-b317-ccd5a0a74456', '1.0.0b3.r1', '', '2008-05-20 19:10:00', '1', '100', '4', 'Factiva', 'Simon Kornblith', 'https?://[^/]*global\.factiva\.com[^/]*/ha/default\.aspx$', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; if(doc.evaluate(''//tr[@class="headline"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { if(doc.body.className == ''articleView'') { return "newspaperArticle"; } else { return "multiple"; } } }', 'function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var items = new Array(); var singlePage = doc.body.className == ''articleView''; var tableRows = doc.evaluate(''//tr[@class="headline"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var tableRow; while(tableRow = tableRows.iterateNext()) { var hdl = doc.evaluate(''.//input[@name="hdl"]'', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().value; if(!singlePage){ items[hdl] = Zotero.Utilities.cleanString(tableRow.getElementsByTagName("a")[0].textContent); } else { var m = doc.evaluate(''.//td[@class="count"]'', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.match(/[0-9]+/); items[m[0]] = hdl; } } if(!singlePage) { items = Zotero.selectItems(items); if(!items) return true; var hdls = new Array(); for(var hdl in items) { hdls.push(hdl); } } else { var m = doc.evaluate(''//div[@class="articleHeader"][@id="artHdr1"]/span[substring(text(), 1, 7) = "Article"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.match(/[0-9]+/); var hdls = [items[m[0]]]; } var post = ""; var hiddenInputs = doc.evaluate(''//form[@name="PageBaseForm"]//input[@type="hidden"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var hiddenInput; while(hiddenInput = hiddenInputs.iterateNext()) { // this is some weird shit, but apparently they''re very picky post = post+"&"+hiddenInput.name+"="+escape(hiddenInput.value).replace(/\+/g, "%2B").replace(/\%20/g, "+"); } var selects = doc.evaluate(''//form[@name="PageBaseForm"]//select'', doc, nsResolver, XPathResult.ANY_TYPE, null); var select; while(select = selects.iterateNext()) { post = post+"&"+select.name+"="+escape(select.options[select.selectedIndex].value); } for each(var hdl in hdls) { post += "&hdl="+escape(hdl); } post = post.substr(1); Zotero.Utilities.HTTP.doPost("http://global.factiva.com/pps/default.aspx?pp=XML", post, function(text) { // Remove xml parse instruction and doctype text = text.replace(/<!DOCTYPE[^>]*>/, "").replace(/<\?xml[^>]*\?>/, ""); // kill the XML namespace, too, because we have no way of knowing what it will be, which presents a problem text = text.replace(/<ppsArticleResponse xmlns="[^"]+">/, "<ppsArticleResponse>"); // kill hlt tags; they just make parsing harder text = text.replace(/<\/?hlt>/g, ""); var xml = new XML(text); // loop through articles for each(var ppsarticle in xml[0]..ppsarticle) { var article = ppsarticle.article; var newItem = new Zotero.Item("newspaperArticle"); newItem.title = Zotero.Utilities.cleanString(article.headline.paragraph.text().toString()); newItem.publicationTitle = Zotero.Utilities.cleanString(article.sourceName.text().toString()); for each(var tag in article..name) { newItem.tags.push(tag.text().toString()); } newItem.date = Zotero.Utilities.formatDate(Zotero.Utilities.strToDate(article.publicationDate.date.text().toString())); if(article.byline.length()) { var byline = Zotero.Utilities.cleanString(article.byline.text().toString().replace(/By/i, "")); var authors = byline.split(/ (?:\&|and) /i); for each(var author in authors) { newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author")); } } newItem.section = article.sectionName.text().toString(); newItem.edition = article.edition.text().toString(); if(article.pages.length()) { newItem.pages = ""; for each(var page in article.pages.page) { newItem.pages += ","+page.text().toString(); } newItem.pages = newItem.pages.substr(1); } var m = article.volume.text().toString().match(/ISSN[:\s]*([\-0-9]{8,9})/i); if(m) newItem.ISSN = m[1]; newItem.complete(); } Zotero.done(); }); Zotero.wait(); }'); REPLACE INTO translators VALUES ('850f4c5f-71fb-4669-b7da-7fb7a95500ef', '1.0.0b3r1', '', '2008-07-08 15:35:00', '1', '100', '4', 'Cambridge Journals Online', 'Sean Takats and Michael Berkowitz', 'https?://[^/]*journals.cambridge.org[^/]*//?action/(quickSearch|search|displayAbstract|displayFulltext|displayIssue)', 'function detectWeb(doc, url) { var namespace=doc.documentElement.namespaceURI; var nsResolver=namespace?function(prefix) { return (prefix=="x")?namespace:null; }:null; var xpath = ''//tr[td/input[@type="checkbox"][@name="toView"]]''; if ((url.indexOf("/action/displayAbstract") != -1) || (url.indexOf("action/displayFulltext") != -1)){ return "journalArticle"; } else if (doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()){ return "multiple"; } }', 'function doWeb(doc, url){ var namespace=doc.documentElement.namespaceURI; var nsResolver=namespace?function(prefix) { return (prefix=="x")?namespace:null; }:null; var host = doc.location.host; var urlstring="http://" + host + "/action/exportCitation"; var datastring="format=RIS&emailId=&Download=Download&componentIds="; var links = new Array(); if(detectWeb(doc, url) == "multiple"){ var xpath = ''//tr[td/input[@type="checkbox"][@name="toView"]]''; var tableRows = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var tableRow; var items=new Array(); while (tableRow = tableRows.iterateNext()){ var id = doc.evaluate(''./td/input[@type="checkbox"][@name="toView"]/@value'', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); var title = doc.evaluate(''./td/h3'', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); items[''http://'' + host + ''/action/displayAbstract?aid='' + id.nodeValue] = Zotero.Utilities.capitalizeTitle(title.textContent); } items=Zotero.selectItems(items); for (var i in items) { links.push(i); } } else { links = [url]; } Zotero.Utilities.processDocuments(links, function(doc) { if (doc.evaluate(''//p[@class="AbsType"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var abs = doc.evaluate(''//p[@class="AbsType"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; } if (doc.evaluate(''//p[@class="KeyWords"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var kws = doc.evaluate(''//p[@class="KeyWords"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.substr(11).split(''; ''); } var pdfpath=''//div/ul/li/a[contains(text(), "PDF")]''; if (doc.evaluate(pdfpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var pdflink =doc.evaluate(pdfpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().href; } idRe = /aid=([0-9]+)/ var m = idRe.exec(doc.location.href); var id = m[1]; Zotero.Utilities.HTTP.doGet(urlstring + "?" + datastring+id, function(text) { text = text.replace(/(^|\n)?([A-Z\d]{2})\s+\-\s+(\n)?/g, "\n$2 - $3"); var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { item.attachments = [{url:url, title:"Cambridge Journals Snapshot", mimeType:"text/html"}] if (pdflink) item.attachments.push({url:pdflink, title:"Cambridge Journals PDF", mimeType:"application/pdf"}); item.url = url; item.title = Zotero.Utilities.capitalizeTitle(item.title); var authors = item.creators; item.creators = new Array(); for each (var aut in authors) { item.creators.push({firstName:aut.firstName, lastName:aut.lastName, creatorType:"author"}); } if (kws) item.tags = kws; if (abs) item.abstractNote = Zotero.Utilities.trimInternal(abs); item.complete(); }); translator.translate(); }); }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('82174f4f-8c13-403b-99b2-affc7bc7769b', '1.0.0b3.r1', '', '2008-05-28 18:30:00', '1', '100', '4', 'Cambridge Scientific Abstracts', 'Simon Kornblith and Michael Berkowitz', 'https?://[^/]+/ids70/(?:results.php|view_record.php)', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; if(url.indexOf("/results.php") != -1) { var type = doc.evaluate(''//td[@class="rt_tab_on"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; if(type.substr(0, 15) == "Published Works") { return "multiple"; } } else { // default to journal var itemType = "journalArticle"; var type = doc.evaluate(''//tr[td[1][@class="data_heading"]/text() = "Publication Type"]/td[3]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if(type) { type = Zotero.Utilities.cleanString(type.textContent); if(type == "Book Chapter") { return "bookSection"; } else if(type.substr(0, 4) == "Book") { return "book"; } else if(type.substr(0, 12) == "Dissertation") { return "thesis"; } else if(type == "Catalog") { return "magazineArticle"; } } return "journalArticle"; } return false; }', 'function scrape(doc) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var itemType = "journalArticle"; var type = doc.evaluate(''//tr[td[1][@class="data_heading"]/text() = "Publication Type"]/td[3]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if(type) { type = Zotero.Utilities.trimInternal(type.textContent); if(type == "Book Chapter") { itemType = "bookSection"; } else if(type.substr(0, 4) == "Book") { itemType = "book"; } else if(type.substr(0, 12) == "Dissertation") { itemType = "thesis"; } else if(type == "Catalog") { itemType = "magazineArticle"; } } var newItem = new Zotero.Item(itemType); newItem.attachments = [{document:doc, title:"Cambridge Scientific Abstracts Snapshot"}]; newItem.title = Zotero.Utilities.trimInternal(doc.evaluate(''//tr/td[3][@class="data_emphasis"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent); var dataRows = doc.evaluate(''//tr[td[3][@class="data_content"]]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var dataRow; while(dataRow = dataRows.iterateNext()) { var tds = dataRow.getElementsByTagName("td"); var heading = Zotero.Utilities.trimInternal(tds[0].textContent).toLowerCase(); var content = Zotero.Utilities.trimInternal(tds[2].textContent); if(heading == "database") { newItem.repository = "Cambridge Scientific Abstracts ("+content+")"; } else if(heading == "author") { var authors = content.split("; "); for each(var author in authors) { newItem.creators.push(Zotero.Utilities.cleanAuthor(author.replace(/\d+/g, ""), "author", true)); } } else if(heading == "source") { if(itemType == "journalArticle") { var parts = content.split(/(,|;)/); newItem.publicationTitle = parts.shift(); for each (var i in parts) { if (i.match(/\d+/)) { if (i.match(/v(ol)?/)) { newItem.volume = i.match(/\d+/)[0]; } else if (i.match(/pp/)) { newItem.pages = i.match(/[\d\-]+/)[0]; } else if (i.match(/no?/)) { newItem.issue = i.match(/\d+/)[0]; } else if (i.match(/\d{4}/)) { newItem.date = Zotero.Utilities.trimInternal(i); } } } } else if(itemType == "book") { var m = content.match(/^([^:]+): ([^,0-9]+)/); if(m) { newItem.place = m[1]; newItem.publisher = m[2]; } } else if(itemType == "bookSection") { if(content.length > newItem.publicationTitle.length && content.substr(0, newItem.publicationTitle.length) == newItem.publicationTitle) { var m = content.match(/\)\. ([^:]+): ([^,0-9]+)/); if(m) { newItem.place = m[1]; newItem.publisher = m[2]; } var m = content.match(/\(pp. ([\-0-9]+)\)/); if(m) newItem.pages = m[1]; } } } else if(heading == "monograph title") { newItem.publicationTitle = content; } else if(heading == "series title") { newItem.series = content; } else if(heading == "issn") { newItem.ISSN = content; } else if(heading == "isbn") { newItem.ISBN = content; } else if(heading == "abstract") { newItem.abstractNote = content; } else if(heading == "notes") { newItem.extra = content; } else if(heading == "publication year") { if(!newItem.date) newItem.date = content; } else if(heading == "information provider") { if(content.substr(0, 19) == "http://dx.doi.org/") { newItem.DOI = content.substr(19); } } else if(heading == "journal volume") { newItem.volume = content; } else if(heading == "journal pages") { newItem.pages = content; } else if(heading == "journal issue") { newItem.issue = content; } else if(heading == "affiliation") { if(newItem.itemType == "thesis") { newItem.publisher = content; } } } var terms = doc.evaluate(''//input[substring(@name, 1, 4) = "term"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var term; while(term = terms.iterateNext()) { newItem.tags.push(term.value.replace(/ [0-9]{3,}$/, "")); } newItem.complete(); } function doWeb(doc, url) { if(url.indexOf("/results.php") != -1) { var items = Zotero.Utilities.getItemArray(doc, doc, ''/view_record\.php\?'', ''^(?:View Record|More\.{3})$''); items = Zotero.selectItems(items); if(!items) return true; var urls = new Array(); for(var url in items) { urls.push(url); } Zotero.Utilities.processDocuments(urls, scrape, function() { Zotero.done() }) Zotero.wait(); } else { scrape(doc); } }'); REPLACE INTO translators VALUES ('e78d20f7-488-4023-831-dfe39679f3f', '1.0.0b3.r1', '', '2009-01-28 18:10:00', 1, 100, 4, 'ACM', 'Simon Kornblith and Michael Berkowitz', 'https?://[^/]*portal\.acm\.org[^/]*/(?:results\.cfm|citation\.cfm)', 'function detectWeb(doc, url) { if(url.indexOf("/results.cfm") != -1) { var items = Zotero.Utilities.getItemArray(doc, doc, ''^https?://[^/]+/citation.cfm\\?[^#]+$''); // hack to return multiple if there are items for(var i in items) { return "multiple"; } } else { var onClick = doc.evaluate(''//a[substring(text(), 5, 7) = "EndNote"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().getAttribute("onClick"); if(onClick.match("proceeding.article")) { return "conferencePaper"; } else { return "journalArticle"; } } }', 'var urls = new Array(); // this handles sequential loading, since first we need to process a document (to get the abstract), then // get the Refer metadata, then process the next document, etc. function getNext() { if(urls.length) { var url = urls.shift(); Zotero.Utilities.processDocuments([url], function(doc) { scrape(doc); }); } else { Zotero.done(); } } function scrape(doc) { var onClick = doc.evaluate(''//a[substring(text(), 5, 7) = "EndNote"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().getAttribute("onClick"); var m = onClick.match(/''([^'']+)''/); if (doc.evaluate(''//div[@class="abstract"]/p[@class="abstract"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { var abstract = doc.evaluate(''//div[@class="abstract"]/p[@class="abstract"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext(); if (!abstract.textContent.match(/\w+/)) { var abstract = doc.evaluate(''//div[@class="abstract"]/p[2]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext(); } if(abstract) abstract = Zotero.Utilities.trimInternal(abstract.textContent); } var snapshot = doc.location.href; var attachments = new Array(); var url; var typeLinks = doc.evaluate(''//td[@class="smaller-text"]/a[img]'', doc, null, XPathResult.ANY_TYPE, null); var typeLink; while(typeLink = typeLinks.iterateNext()) { var linkText = typeLink.textContent.toLowerCase(); if(linkText == "pdf") { attachments.push({title:"ACM Full Text PDF", mimeType:"application/pdf", url:typeLink.href}); url = typeLink.href; } else if(linkText == "html") { url = snapshot = typeLink.href; } } attachments.push({title:"ACM Snapshot", mimeType:"text/html", url:snapshot}); var keywords = new Array(); var keywordLinks = doc.evaluate(''//p[@class="keywords"]/a'', doc, null, XPathResult.ANY_TYPE, null); var keywordLink; while(keywordLink = keywordLinks.iterateNext()) { keywords.push(Zotero.Utilities.trimInternal(keywordLink.textContent.toLowerCase())); } var doi = ""; var doiElmt = doc.evaluate(''/html/body/div/table/tbody/tr[4]/td/table/tbody/tr/td/table/tbody/tr[3]/td[2][@class="small-text"]/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext() if (doiElmt){ var match = doiElmt.textContent.match(/org\/(.*)/); if (match){ doi = match[1]; } } Zotero.Utilities.HTTP.doGet("http://portal.acm.org/"+m[1], function(text) { // split() may no longer be necessary var m = text.split(/<\/?pre[^>]*>/ig); if (m[1]) { var text = m[1]; } // unescape HTML for extended characters function unescapeHTML(str, p1){ return Zotero.Utilities.unescapeHTML(""+p1); } text = text.replace(/\\&\\#([^;]+;)/g, unescapeHTML); // load Refer translator var translator = Zotero.loadTranslator("import"); translator.setTranslator("881f60f2-0802-411a-9228-ce5f47b64c7d"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { if(abstract) item.abstractNote = abstract; item.attachments = attachments; item.tags = keywords; item.DOI = doi; item.url = snapshot; item.complete(); }); translator.translate(); getNext(); }); } function doWeb(doc, url) { if(url.indexOf("/results.cfm") != -1) { var items = Zotero.Utilities.getItemArray(doc, doc, ''^https?://[^/]+/citation.cfm\\?[^#]+$''); items = Zotero.selectItems(items); if(!items) return true; for(var url in items) { urls.push(url); } getNext(); } else { scrape(doc); } Zotero.wait(); }'); REPLACE INTO translators VALUES ('6f5f1b24-7519-4314-880f-d7004fbcfe7e', '1.0.0b4.r5', '', '2008-07-10 06:15:00', '0', '100', '4', 'ReliefWeb', 'Michael Berkowitz', 'http://(www.)?reliefweb.int/', 'function detectWeb(doc, url) { if (url.match(/(S|s)earch(R|r)esults/)) { return "multiple"; } else if (url.match(/(O|o)pen(D|d)ocument/)) { return "journalArticle"; } }', 'function doWeb(doc, url) { var arts = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); var links = doc.evaluate(''//div[@id="View"]/table/tbody/tr/td[4][@class="docView"]/a'', doc, null, XPathResult.ANY_TYPE, null); var link; while (link = links.iterateNext()) { items[link.href] = Zotero.Utilities.trimInternal(link.textContent); } items = Zotero.selectItems(items); for (var i in items) { arts.push(i); } } else { arts = [url]; } Zotero.debug(arts); Zotero.Utilities.processDocuments(arts, function(doc) { var item = new Zotero.Item("journalArticle"); item.title = Zotero.Utilities.trimInternal(doc.evaluate(''//div[@id="docTitle"]/h1'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); item.date = Zotero.Utilities.trimInternal(doc.evaluate(''//div[@id="link"]/p[2]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent.substr(6)); item.url = doc.location.href; if (doc.evaluate(''//div[@id="docBody"]/p/i'',doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { var auts = doc.evaluate(''//div[@id="docBody"]/p/i'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent; item.abstractNote = Zotero.Utilities.trimInternal(doc.evaluate(''//div[@id="docBody"]/p[1]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent.replace(auts, "")); auts = auts.replace(''By '', "").split(/\//); for each (var aut in auts) { item.creators.push(Zotero.Utilities.cleanAuthor(aut, "author")); } } else { item.abstractNote = Zotero.Utilities.trimInternal(doc.evaluate(''//div[@id="docBody"]/p[1]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().textContent); } item.complete(); }, function() {Zotero.done;}); Zotero.wait(); }'); REPLACE INTO translators VALUES ('594ebe3c-90a0-4830-83bc-9502825a6810', '1.0.0b4.r5', '', '2009-02-25 07:15:00', 1, 100, 4, 'ISI Web of Knowledge', 'Michael Berkowitz', '(WOS_GeneralSearch|product=WOS)', 'function detectWeb(doc, url) { if (doc.title.indexOf("Web of Science Results") != -1) { return "multiple"; } else if (url.indexOf("full_record.do") != -1) { return "journalArticle"; } }', 'function doWeb(doc, url) { var ids = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object; var xpath = ''//a[@class="smallV110"]''; var titles = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null); var next_title; while (next_title = titles.iterateNext()) { items[next_title.href.match(/\?(.*)/)[1]] = next_title.textContent; } items = Zotero.selectItems(items); for (var i in items) { ids.push(i); } } else { ids.push(url.match(/\?(.*)/)[1]); } var hostRegexp = new RegExp("^(https?://[^/]+)/"); var m = hostRegexp.exec(url); var host = m[1]; for (var i in ids) { ids[i] = host+"/full_record.do?" + ids[i]; } Zotero.Utilities.processDocuments(ids, function(newDoc) { var url = newDoc.location.href; var sid = newDoc.evaluate(''//input[@name="selectedIds"]'', newDoc, null, XPathResult.ANY_TYPE, null).iterateNext().value; var nid = newDoc.evaluate(''//input[@name="SID"]'', newDoc, null, XPathResult.ANY_TYPE, null).iterateNext().value; var post2 = ''product=WOS&product_sid='' + nid + ''&plugin=&product_st_thomas=http://esti.isiknowledge.com:8360/esti/xrpc&export_ref.x=0&export_ref.y=0''; var post = ''action=go&mode=quickOutput&product=WOS&SID='' + nid + ''&format=ref&fields=BibAbs&mark_id=WOS&count_new_items_marked=0&selectedIds='' + sid + ''&qo_fields=bib&endnote.x=95&endnote.y=12&save_options=default''; Zotero.Utilities.HTTP.doPost(''http://apps.isiknowledge.com/OutboundService.do'', post, function() { Zotero.Utilities.HTTP.doPost(''http://pcs.isiknowledge.com/uml/uml_view.cgi'', post2, function(text) { var lines = text.split("\n"); var field = " "; var content = " "; var item = new Zotero.Item("journalArticle"); item.url = url; var authors; var fieldRe = /^[A-Z0-9]{2}(?: |$)/; for each(var line in lines) { if(line.match(fieldRe)) { field = line.match(fieldRe)[0].substr(0,2); content = line.substr(3); if ((field == "AF" || field == "AU")) { if (!item.creators[0]) { var author = content.split(","); item.creators.push({firstName:author[1], lastName:author[0], creatorType:"author"}); } else { field = ""; } } else if (field == "TI") { item.title = content; } else if (field == "SO") { item.publicationTitle = content; } else if (field == "SN") { item.ISSN = content; } else if (field == "PD" || field == "PY") { if (item.date) { item.date += " " + content; } else { item.date = content; } } else if (field == "VL") { item.volume = content; } else if (field == "IS") { item.issue = content; } else if (field == "BP") { item.pages = content; } else if (field == "EP") { item.pages += "-" + content; } else if (field == "AB") { item.abstractNote = content; } else if (field == "DI") { item.DOI = content; } } else { content = Zotero.Utilities.trimInternal(line); if (field == "AF" || field == "AU") { var author = content.split(","); item.creators.push({firstName:author[1], lastName:author[0], creatorType:"author"}); } else if (field == "TI") { item.title += " " + content; } else if (field == "AB") { item.abstractNote += " " + content; } } } item.attachments = [{url:item.url, title:"ISI Web of Knowledge Snapshot", mimeType:"text/html"}]; item.complete(); }); }); }, function() {Zotero.done();}); }'); REPLACE INTO translators VALUES ('84564450-d633-4de2-bbcc-451ea580f0d6', '1.0.0b3.r1', '', '2007-03-28 20:00:00', '1', '100', '4', 'Gale Literature Resource Center', 'Simon Kornblith', '^https?://[^/]+/servlet/LitRC?(?:|.*&)srchtp=(?:adv)?mla(?:&|$)', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; if(doc.title.length <= 33 || doc.title.substr(0, 33) != "Literature Resource Center -- MLA") return false; if(url.indexOf("docNum=") != -1) { // article; return "journalArticle"; } else if(doc.evaluate(''//tr[td/span[@class="stndxtralead"]]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; } return false; }', 'function extractCitation(type, citation) { type = Zotero.Utilities.cleanString(type).toLowerCase(); citation = Zotero.Utilities.cleanString(citation); if(type == "book article") { var item = new Zotero.Item("bookSection"); } else if(type == "book" || type == "book collection") { var item = new Zotero.Item("book"); } else if(type == "dissertation abstract") { var item = new Zotero.Item("thesis"); } else { var item = new Zotero.Item("journalArticle"); } var m; if(item.itemType == "journalArticle" || item.itemType == "thesis") { m = citation.match(/^(.+)\. "([^"]+)" (.+), ([0-9\:]*) ?\(([^\)]+)\)(?:, (?:pp\. ([\-0-9]+)|([\-0-9A-Z]+)))?/); if(!m) return false; item.publicationTitle = m[3]; var parts = m[4].split(":"); if(parts.length == 2) { item.volume = parts[0]; item.issue = parts[1]; } else { item.issue = m[4]; } item.date = m[5]; item.pages = m[6] ? m[6] : m[7]; } else if(item.itemType == "book") { m = citation.match(/^(.+)\. "([^"]+)" ([^:]+): ([^,]+), ([0-9]{4})\..*?(?:([0-9]+) pp\.)/); if(!m) return false; item.place = m[3]; item.publisher = m[4]; item.date = m[5]; item.pages = m[6]; } else if(item.itemType == "bookSection") { m = citation.match(/^(.+)\. "([^"]+)" pp\. ([\-0-9]+)\. (?:((?:[^\.]*|\([^\)]+\)| [A-Z]\.)*)\.)? ([^\(\)]+). ([^:]+): ([^,]+), ([0-9]{4})/); if(!m) return false; Zotero.debug(m); item.pages = m[3]; var bookAuthors = m[4].split(" and "); for each(var bookAuthor in bookAuthors) { var n = bookAuthor.match(/^([^,]+), ([^\(]+)(?: \(([^\)]+)\)?)?$/); if(n) { var type = (n[3] && n[3].toLowerCase().indexOf("ed.") != -1) ? "editor" : "author"; item.creators.push({lastName:n[1], firstName:n[2], creatorType:type}) } } item.publicationTitle = m[5]; item.place = m[6]; item.publisher = m[7]; item.date = m[8]; } // add creators var creators = m[1].split("; "); for each(var creator in creators) { item.creators.push(Zotero.Utilities.cleanAuthor(creator, "author", true)); } if(m[2][m[2].length-1] == ".") { item.title = m[2].substr(0, m[2].length-1); } else { item.title = m[2]; } return item; } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var uri = doc.location.href; if(url.indexOf("docNum=") != -1) { // article; var citation = doc.evaluate(''//td[b/text() = "Source Database:"] | //td[*/b/text() = "Source Database:"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().innerHTML; // ugh var parts = citation.split(/<\/CENTER>/i); var citation = parts[parts.length-1]; citation = citation.replace(/<script[^>]*>(?:.|[\r\n])*<\/script>/gi, ""); citation = citation.replace(/<a[^>]*>(?:.|[\r\n])*<\/a>/gi, ""); // big enormous hack, but it works var span = doc.createElement("span"); span.innerHTML = citation; citation = span.textContent; var citeM = citation.match(/^\s*([^\n]+)/); var subjectM = citation.match(/Subject Terms:\s+([^\n]+)/); var typeM = citation.match(/Document Type:\s+([^\n]+)/); var issnM = citation.match(/ISSN:\s+([^\n]+)/); var item = extractCitation(typeM[1], citeM[1]); item.tags = subjectM[1].split("; "); if(issnM) item.ISSN = issnM[1]; item.complete(); } else { // search results var items = new Array(); var tableRows = doc.evaluate(''//tr[td/span[@class="stndxtralead"]]'', doc, nsResolver, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); // Go through table rows for(var i=0; i<tableRows.snapshotLength; i++) { items[i] = doc.evaluate(''./td/span[@class="stndxtralead"]//a'', tableRows.snapshotItem(i), nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; items[i] = items[i].substring(1, items[i].length-1); } items = Zotero.selectItems(items); if(!items) return true for(var i in items) { var tableRow = tableRows.snapshotItem(i); var type = doc.evaluate(''./td[3]/span[@class="stndxtralead"]'', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; var citation = doc.evaluate(''./td/span[@class="stndxtralead"]'', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; var item = extractCitation(type, citation); if(!item) continue; var terms = doc.evaluate(''.//span[@class="mlasubjects"]'', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if(terms) { // chop off "[Subject Terms: " and "]" terms = terms.textContent; terms = terms.substring(16, terms.length-2); item.tags = terms.split("; "); } item.complete(); } } }'); REPLACE INTO translators VALUES ('5eacdb93-20b9-4c46-a89b-523f62935ae4', '1.0.0b3.r1', '', '2008-04-04 20:00:00', '1', '100', '4', 'HighWire', 'Simon Kornblith', '^http://[^/]+/(?:cgi/searchresults|cgi/search|cgi/content/(?:abstract|full|short|summary)|current.dtl$|content/vol[0-9]+/issue[0-9]+/(?:index.dtl)?$)', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; if(doc.title.indexOf(" -- Search Result") != -1 || doc.title == "Science/AAAS | Search Results") { if(doc.evaluate(''//table/tbody/tr[td/input[@type="checkbox"][@name="gca"]]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) return "multiple"; } else if(doc.title.indexOf(" -- Table of Contents") != -1|| doc.title == "Science/AAAS | Science Magazine Search Results") { if(doc.evaluate(''//form/dl'', doc, nsResolver, XPathResult.ANY_TYPE,null).iterateNext()) return "multiple"; } else { if(doc.evaluate(''//a[substring(@href, 1, 16) = "/cgi/citmgr?gca="]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) return "journalArticle"; } return false; }', 'function handleRequests(requests) { if(requests.length == 0) { Zotero.done(); return; } var request = requests.shift(); var URL = request.baseURL+request.args; Zotero.Utilities.HTTP.doGet(URL, function(text) { // load translator for RIS var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { if(item.notes[0]) { item.DOI = item.notes[0].note; item.notes = new Array(); } item.attachments = new Array(); var snapshot = request.snapshots.shift(); var pdf = request.pdfs.shift(); if(snapshot) { if(typeof(snapshot) == "string") { // string snapshot (from search) item.attachments.push({title:"HighWire Snapshot", mimeType:"text/html", url:snapshot}); } else { // document object item.attachments.push({title:"HighWire Snapshot", document:snapshot}); } } if(pdf) { var m = pdf.match(/^[^?]+/); item.attachments.push({title:"HighWire Full Text PDF", mimeType:"application/pdf", url:m[0]+".pdf"}); } item.complete(); }); translator.translate(); handleRequests(requests); }); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var requests = new Array(); var hostRe = /https?:\/\/[^\/]+/; var isSearch = doc.title.indexOf("Search Result") != -1 var isTOC = doc.title.indexOf(" -- Table of Contents") != -1; var isScience = doc.title.indexOf("Science Magazine Search Results") != -1; if(isSearch || isTOC) { // search page var items = new Object(); var snapshots = new Object(); var pdfs = new Object(); if(isTOC) { var gcaRe = /^https?:\/\/[^\/]+\/cgi\/reprint\/([0-9]+\/[0-9]+\/[0-9]+)/; var tableRows = doc.evaluate(''//form/dl'', doc, nsResolver, XPathResult.ANY_TYPE, null); } else if(isScience) { var tableRows = doc.evaluate(''//form/dl/dd'', doc, nsResolver, XPathResult.ANY_TYPE, null); var tableDTs = doc.evaluate(''//form/dl/dt'', doc, nsResolver, XPathResult.ANY_TYPE, null); } else { var tableRows = doc.evaluate(''//table/tbody/tr[td/input[@type="checkbox"]][td/font/strong]'', doc, nsResolver, XPathResult.ANY_TYPE, null); } var tableRow, link; while(tableRow = tableRows.iterateNext()) { var snapshot = undefined; var pdf = undefined; if(isTOC) { var title = doc.evaluate(''.//strong'', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; var links = doc.evaluate(''.//a'', tableRow, nsResolver, XPathResult.ANY_TYPE, null); while(link = links.iterateNext()) { // prefer Full Text snapshots, but take abstracts if(link.textContent == "[Abstract]") { if(!snapshot) snapshot = link.href; } else if (link.textContent == "[Full Text]") { snapshot = link.href; } else if(link.textContent == "[PDF]") { pdf = link.href; var m = gcaRe.exec(link.href); var gca = m[1]; } } } else { if(isScience) { var tableDT = tableDTs.iterateNext(); var gca = doc.evaluate(''./input[@type="checkbox"]'', tableDT, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().value; var title = doc.evaluate(''./label'', tableDT, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; } else { var gca = doc.evaluate(''./td/input[@type="checkbox"]'', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().value; var title = doc.evaluate(''./td/font/strong'', tableRow, nsResolver, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); if(title.snapshotItem(0).textContent.toUpperCase() == title.snapshotItem(0).textContent) { title = title.snapshotItem(1).textContent; } else { title = title.snapshotItem(0).textContent; } } var links = doc.evaluate(''.//a'', tableRow, nsResolver, XPathResult.ANY_TYPE, null); while(link = links.iterateNext()) { // prefer Full Text snapshots, but take abstracts var textContent = Zotero.Utilities.cleanString(link.textContent); if((textContent.substr(0, 8) == "Abstract" && !snapshot) || textContent.substr(0, 9) == "Full Text") { snapshot = link.href; } else if(textContent.substr(0, 3) == "PDF") { pdf = link.href; } } } snapshots[gca] = snapshot; pdfs[gca] = pdf; items[gca] = Zotero.Utilities.cleanString(title); } items = Zotero.selectItems(items); if(!items) return true; var requests = new Array(); for(var gca in items) { var m = hostRe.exec(pdfs[gca]); var baseURL = ''http://'' + doc.location.host + ''/cgi/citmgr?type=refman''; var thisRequest = null; for each(var request in requests) { if(request.baseURL == baseURL) { thisRequest = request; break; } } if(!thisRequest) { thisRequest = new Object(); thisRequest.snapshots = new Array(); thisRequest.pdfs = new Array(); thisRequest.args = ""; thisRequest.baseURL = baseURL; requests.push(thisRequest); } thisRequest.snapshots.push(snapshots[gca]); thisRequest.pdfs.push(pdfs[gca]); thisRequest.args += "&gca="+gca; } } else { var baseURL = doc.evaluate(''//a[substring(@href, 1, 16) = "/cgi/citmgr?gca="]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().href; var pdf = doc.location.href.replace(/\/content\/[^\/]+\//, "/reprint/"); Zotero.debug(pdf); var requests = [{baseURL:baseURL, args:"&type=refman", snapshots:[doc], pdfs:[pdf]}]; } handleRequests(requests); Zotero.wait(); }'); REPLACE INTO translators VALUES ('8c1f42d5-02fa-437b-b2b2-73afc768eb07', '1.0.0b4.r5', '', '2008-12-27 20:50:00', 1, 100, 4, 'PNAS', 'Matt Burton', 'http://www\.pnas\.org/(content|search|cgi/collection/.+)', '// This translator is for HighWire 2.0 function detectWeb(doc, url) { if (url.match("search") || url.match("content/by/section") || doc.title.match("Table of Contents") || doc.title.match("Early Edition") || url.match("cgi/collection/.+")) { return "multiple"; } else if (url.match("content/[0-9]")) { return "journalArticle"; } }', 'function doWeb(doc, url) { var arts = new Array(); if (detectWeb(doc, url) == "multiple") { var items = new Object(); if (doc.title.match("Table of Contents") || doc.title.match("Early Edition")) { var searchx = ''//li[@class = "cit toc-cit" and not(ancestor::div/h2/a/text() = "Correction" or ancestor::div/h2/a/text() = "Corrections")]''; var titlex = ''.//h4''; } else if (url.match("content/by/section") || url.match("cgi/collection/.+")) { var searchx = ''//li[contains(@class, "results-cit cit")]''; var titlex = ''.//span[@class = "cit-title"]''; } else { var searchx = ''//div[@class = "results-cit cit"]''; var titlex = ''.//span[@class = "cit-title"]''; } var linkx = ''.//a[1]''; var searchres = doc.evaluate(searchx, doc, null, XPathResult.ANY_TYPE, null); var next_res; while (next_res = searchres.iterateNext()) { var title = doc.evaluate(titlex, next_res, null, XPathResult.ANY_TYPE, null).iterateNext().textContent; var link = doc.evaluate(linkx, next_res, null, XPathResult.ANY_TYPE, null).iterateNext().href; items[link] = title; } items = Zotero.selectItems(items); for (var i in items) { arts.push(i); } } else { arts = [url]; } var newurls = new Array(); for each (var i in arts) { newurls.push(i); } Zotero.Utilities.HTTP.doGet(arts, function(text) { var id = text.match(/=([^=]+)\">\s*Download to citation manager/)[1]; var newurl = newurls.shift(); if (newurl.match("cgi/content")) { var pdfurl = newurl.replace(/cgi\/content\/abstract/, "content") + ".full.pdf"; } else { // This is not ideal...todo: brew a regex that grabs the correct URL var pdfurl = newurl.slice(0, newurl.lastIndexOf(".")) + ".full.pdf"; } var get = ''http://www.pnas.org/citmgr?type=refman&gca='' + id; Zotero.Utilities.HTTP.doGet(get, function(text) { var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); if (text.match(/N1(.*)\n/)) { var doi = text.match(/N1\s+\-\s+(.*)\n/)[1]; } translator.setHandler("itemDone", function(obj, item) { item.attachments = [ {url:newurl, title:"PNAS Snapshot", mimeType:"text/html"}, {url:pdfurl, title:"PNAS Full Text PDF", mimeType:"application/pdf"} ]; if (doi) item.DOI = doi; if (item.notes) item.notes = []; item.complete(); }); translator.translate(); }); }); Zotero.wait(); }'); REPLACE INTO translators VALUES ('a354331-981b-43de-a61-bc26dd1be3a9', '1.0.0b3.r1', '', '2007-03-24 22:20:00', '1', '100', '4', 'AMS MathSciNet', 'Simon Kornblith', '^https?://www\.ams\.org[^/]*/mathscinet/search/(?:publications\.html|publdoc\.html)', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var tableRows = doc.evaluate(''//div[@id="content"]/form/div[@class="headline"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); if(tableRows.iterateNext()) { return "multiple" } else if(doc.evaluate(''//div[@id="titleSeparator"]/div[@class="navbar"]/span[@class="PageLink"]/a[text() = "Up"]'', doc, nsResolver, XPathResult.ANY_TYPE, null)) { return "journalArticle"; } return false; }', 'function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var pub = "http://www.ams.org/mathscinet/search/publications.html?fmt=bibtex"; var tableRows = doc.evaluate(''//div[@id="content"]/form/div[@class="headline"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); var tableRow = tableRows.iterateNext(); if(tableRow) { // search page var items = new Object(); var links = new Object(); do { var id = doc.evaluate(''.//input[@type="checkbox"]'', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().value; items[id] = doc.evaluate(''./div[@class="headlineText"]/span[@class="title"]'', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; links[id] = doc.evaluate(''.//a'', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().href; } while(tableRow = tableRows.iterateNext()) items = Zotero.selectItems(items); if(!items) return true; var docLinks = new Array(); for(var id in items) { pub += "&b="+id; docLinks.push(links[id]); } } else { var MR = doc.evaluate(''//div[@id="content"]/div[@class="doc"]/div[@class="headline"]/strong'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; pub += "&b="+MR.replace(/^MR0*/, ""); } Zotero.Utilities.HTTP.doGet(pub, function(text) { var m = text.match(/<pre>(?:.|[\r\n])*?<\/pre>/g); var bibTeXString = ""; for each(var citation in m) { // kill pre tags citation = citation.substring(5, citation.length-6); bibTeXString += citation; } // import using BibTeX var translator = Zotero.loadTranslator("import"); translator.setTranslator("9cb70025-a888-4a29-a210-93ec52da40d4"); translator.setString(bibTeXString); translator.setHandler("itemDone", function(obj, item) { if(docLinks) { item.attachments.push({title:"MathSciNet Snapshot", url:docLinks.shift(), mimeType:"text/html"}); } else { item.attachments.push({title:"MathSciNet Snapshot", document:doc}); } item.complete(); }); translator.translate(); Zotero.done(); }); }'); REPLACE INTO translators VALUES ('938ebe32-2b2e-4349-a5b3-b3a05d3de627', '1.0.0b3.r1', '', '2009-01-28 18:10:00', 1, 100, 4, 'ACS Publications', 'Sean Takats and Michael Berkowitz and Santawort', 'http://[^/]*pubs3?.acs.org[^/]*/(?:wls/journals/query/(?:subscriberResults|query)\.html|acs/journals/toc.page|cgi-bin/(?:article|abstract|sample|asap).cgi)?', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; if(doc.evaluate(''//input[@id="articleListHeader_selectAllToc"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { Zotero.debug("multiple"); return "multiple"; } else if (doc.evaluate(''//div[@id="articleHead"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { return "journalArticle"; } return false; }', 'function doWeb(doc, url){ var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var host = ''http://'' + doc.location.host + "/"; //Zotero.debug(host); var m = url.match(/https?:\/\/[^\/]*\/doi\/(abs|full)\/(.+)/); var dois = new Array(); if(detectWeb(doc, url) == "multiple") { //search var doi; var title; var availableItems = new Array(); var xpath = ''//div[@class="articleBox"]''; if (doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { elmts = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var elmt = elmts.iterateNext(); do { title = doc.evaluate(''./div[@class="articleBoxMeta"]/h2'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; doi = doc.evaluate(''./div[@class="articleBoxMeta"]/h2/a/@href'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.replace("/doi/abs/",""); if (doi.indexOf("prevSearch") != -1){ doi = doi.substring(0,doi.indexOf("?")); } availableItems[doi] = title; } while (elmt = elmts.iterateNext()) } var items = Zotero.selectItems(availableItems); if(!items) { return true; } for(var i in items) { dois.push(i); } } else if (m){ //single article var doi = m[2]; if (doi.match("prevSearch")) { doi = doi.substring(0,doi.indexOf("?")); } Zotero.debug("DOI= "+doi); dois.push(doi); } var setupSets = []; for each (doi in dois) { var citUrl = host + ''action/showCitFormats?doi='' + doi; setupSets.push({ doi: doi, citUrl: citUrl }); } var setupCallback = function () { //get citation export page''s source code; if (setupSets.length) { var set = setupSets.shift(); Zotero.Utilities.HTTP.doGet(set.citUrl, function(text){ //get the exported RIS file name; var downloadFileName = text.match(/name=\"downloadFileName\" value=\"([A-Za-z0-9_]+)\"/)[1]; Zotero.debug("downloadfilename= "+downloadFileName); processCallback(set.doi,downloadFileName); }); } else { Zotero.done(); } } var processCallback = function (doi,downloadFileName) { var baseurl = "http://pubs.acs.org/action/downloadCitation"; var post = "doi=" + doi + "&downloadFileName=" + downloadFileName + "&include=abs&format=refman&direct=on&submit=Download+article+citation+data"; Zotero.Utilities.HTTP.doPost(baseurl, post,function(text){ // Fix the RIS doi mapping text = text.replace("N1 - doi:","M3 - "); Zotero.debug("ris= "+ text); var translator = Zotero.loadTranslator("import"); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { var pdfUrl = host + ''doi/pdf/'' + doi; var fullTextUrl = host + ''doi/full/'' + doi; item.attachments.push( {title:"ACS Full Text PDF",url:pdfUrl, mimeType:"application/pdf"}, {title:"ACS Full Text Snapshot",url:fullTextUrl, mimeType:"text/html"} ); item.complete(); }); translator.translate(); setupCallback(); }); } setupCallback(); Zotero.wait(); }'); REPLACE INTO translators VALUES ('72cb2536-3211-41e0-ae8b-974c0385e085', '1.0.0b4.r1', '', '2008-06-12 19:30:00', '0', '100', '4', 'ARTFL Encyclopedie', 'Sean Takats', '/cgi-bin/philologic31/(getobject\.pl\?c\.[0-9]+:[0-9]+\.encyclopedie|search3t\?dbname=encyclopedie0507)', 'function detectWeb(doc, url) { if (url.indexOf("getobject.pl") != -1){ return "encyclopediaArticle"; } else { return "multiple"; } }', 'function reconcileAuthor(author){ var authorMap = { "Venel":"Venel, Gabriel-Fran├ºois", "d''Aumont":"d''Aumont, Arnulphe", "de La Chapelle":"de La Chapelle, Jean-Baptiste", "Bourgelat":"Bourgelat, Claude", "Dumarsais":"Du Marsais, C├⌐sar Chesneau", "Mallet":"Mallet, Edme-Fran├ºois", "Toussaint":"Toussaint, Fran├ºois-Vincent", "Daubenton":"Daubenton, Louis-Jean-Marie", "d''Argenville": "d''Argenville, Antoine-Joseph Desallier", "Tarin":"Tarin, Pierre", "Vandenesse":"de Vandenesse, Urbain", "Blondel": "Blondel, Jacques-Fran├ºois", "Le Blond":"Le Blond, Guillaume", "Rousseau":"Rousseau, Jean-Jacques", "Eidous":"Eidous, Marc-Antoine", "d''Alembert":"d''Alembert, Jean le Rond", "Louis":"Louis, Antoine", "Bellin":"Bellin, Jacques-Nicolas", "Diderot":"Diderot, Denis", "Diderot1":"Diderot, Denis", "Diderot2":"Diderot, Denis", "de Jaucourt":"de Jaucourt, Chevalier Louis", "Jaucourt":"de Jaucourt, Chevalier Louis", "d''Holbach":"d''Holbach, Baron" /* not yet mapped Yvon Forbonnais Douchet and Beauz├⌐e Boucher d''Argis Lenglet Du Fresnoy Cahusac Pestr├⌐ Daubenton, le Subd├⌐l├⌐gu├⌐ Goussier de Villiers Barth├¿s Morellet Malouin M├⌐nuret de Chambaud Landois Le Roy */ } if(authorMap[author]) { author = authorMap[author]; } // remove ARTFL''s trailing 5 for odd contributors (e.g. Turgot5) if (author.substr(author.length-1, 1)=="5"){ author = author.substr(0, author.length-1); } return author; } function scrape (doc){ var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var url = doc.location.href; var newItem = new Zotero.Item("encyclopediaArticle"); var xpath = ''/html/body/div[@class="text"]/font''; var titleElmt = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); if (titleElmt) { var title = titleElmt.textContent; } else { xpath = ''/html/body/div[@class="text"]/b''; var title = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; } newItem.title = title; newItem.encyclopediaTitle = "Encyclop├⌐die, ou Dictionnaire raisonn├⌐ des sciences, des arts et des m├⌐tiers"; newItem.shortTitle = "Encyclop├⌐die"; newItem.date = "1751-1772"; newItem.publisher = "Briasson"; newItem.place = "Paris"; newItem.url = url; newItem.attachments.push({title:"ARTFL Snapshot", mimeType:"text/html", url:url, snapshot:true}); // get author and tags var hostRegexp = new RegExp("^(https?://[^/]+)/"); var hMatch = hostRegexp.exec(url); var host = hMatch[1]; var getString1 = "/cgi-bin/philologic31/search3t?dbname=encyclopedie0507&word=&dgdivhead="; var getString2 = "&dgdivocauthor=&dgdivocplacename=&dgdivocsalutation=&dgdivocclassification=&dgdivocpartofspeech=&dgdivtype=&CONJUNCT=PHRASE&DISTANCE=3&PROXY=or+fewer&OUTPUT=conc&POLESPAN=5&KWSS=1&KWSSPRLIM=500"; Zotero.Utilities.HTTP.doGet(host+getString1+title+getString2, function(text){ var tagRe = new RegExp(''>''+title+''</a>[^\[]*\\[([^\\]]*)\]'', ''i''); var m = tagRe.exec(text); if(m[1] != "unclassified"){ var tagstring = m[1].replace("&", "&", "g"); var tags = tagstring.split(";") for(var j in tags) { newItem.tags.push(Zotero.Utilities.cleanString(tags[j])); } } var authorRe = new RegExp(''>''+title+''</a>,([^,]*),'', "i"); var m = authorRe.exec(text); var author = m[1]; author = Zotero.Utilities.cleanString(author); // reconcile author author = reconcileAuthor(author); if (author!="NA"){ // ignore unknown authors newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author", true)); } newItem.creators.push({firstName:"Denis", lastName:"Diderot", creatorType:"editor"}); newItem.creators.push({firstName:"Jean le Rond", lastName:"d''Alembert", creatorType:"editor"}); newItem.complete(); }, function() {Zotero.done();}, null); Zotero.wait(); } function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; if (url.indexOf("getobject.pl") != -1){ // single article scrape(doc); } else { //search page var items = new Object(); var xpath = ''/html/body/div[@class="text"]/p/a''; var elmts = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var elmt; while (elmt = elmts.iterateNext()){ var title = elmt.textContent; var link = elmt.href; if (title && link){ items[link] = title; } } var items = Zotero.selectItems(items); if(!items) { return true; } var urls = new Array(); for(var i in items) { urls.push(i); } Zotero.Utilities.processDocuments(urls, scrape, function() { Zotero.done(); }); Zotero.wait(); } }'); REPLACE INTO translators VALUES ('1b9ed730-69c7-40b0-8a06-517a89a3a278', '1.0.0b3.r1', '', '2009-04-28 09:15:00', 1, 100, 4, 'Sudoc', 'Sean Takats and Michael Berkowitz, updated by Sylvain Machefert', '^http://www\.sudoc\.abes\.fr', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var multxpath = ''/html/body/div[2]/div/span''; if (elt = doc.evaluate(multxpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var content = elt.textContent; if ( (content == "R├⌐sultats") || (content == "Results") ) { return "multiple"; } else if ( (content == "Notice compl├¿te") || (content == "title data") ) { var xpathimage = ''/html/body/div[2]/div[4]/span/img''; if (elt = doc.evaluate(xpathimage, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var type = elt.getAttribute(''src''); if (type.indexOf(''article.gif'') > 0) { return "journalArticle"; } else if (type.indexOf(''book.gif'') > 0) { return "book"; } else if (type.indexOf(''handwriting.gif'') > 0) { return "manuscript"; } else if (type.indexOf(''sons.gif'') > 0) { return "audioRecording"; } else if (type.indexOf(''sound.gif'') > 0) { return "audioRecording"; } else if (type.indexOf(''thesis.gif'') > 0) { return "thesis"; } else if (type.indexOf(''map.gif'') > 0) { return "map"; } else { return "book"; } } } } }', 'function scrape(doc) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var zXpath = ''/html/body/span[@class="Z3988"]''; var eltCoins = doc.evaluate(zXpath, doc, nsResolver, XPathResult.ANY_TYPE, null); if (eltCoins = doc.evaluate(zXpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var coins = eltCoins.getAttribute(''title''); var newItem = new Zotero.Item(); newItem.repository = false; // do not save repository if(Zotero.Utilities.parseContextObject(coins, newItem)) { if (newItem.title) { // We use the same method as in detectWeb to find // the real type of document var xpathimage = ''/html/body/div[2]/div[4]/span/img''; if (elt = doc.evaluate(xpathimage, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { var type = elt.getAttribute(''src''); var ZoteroType = ''''; if (type.indexOf(''article.gif'') > 0) { zoteroType = ''journalArticle''; } else if (type.indexOf(''book.gif'') > 0) { zoteroType = ''book''; } else if (type.indexOf(''handwriting.gif'') > 0) { zoteroType = ''manuscript''; } else if (type.indexOf(''sons.gif'') > 0) { zoteroType = "audioRecording"; } else if (type.indexOf(''sound.gif'') > 0) { zoteroType = "audioRecording"; } else if (type.indexOf(''thesis.gif'') > 0) { zoteroType = "thesis"; } else if (type.indexOf(''map.gif'') > 0) { zoteroType = "map"; } else { zoteroType = "book"; } newItem.itemType = zoteroType; } // We need to correct some informations where COinS is wrong var rowXpath = ''//tr[td[@class="rec_lable"]]''; var tableRows = doc.evaluate(rowXpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var tableRow; while (tableRow = tableRows.iterateNext()) { var field = doc.evaluate(''./td[1]'', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; var value = doc.evaluate(''./td[2]'', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent; field = Zotero.Utilities.superCleanString(field); field = field.replace(/(\(s\))?\s*:\s*$/, ""); // With COins, only one author is taken, changed. if (field.substr(0,6) == "Auteur" || field.substr(0,6) == "Author") { var authors = doc.evaluate(''./td[2]/div'', tableRow, nsResolver, XPathResult.ANY_TYPE, null); newItem.creators = new Array(); while (author = authors.iterateNext()) { var authorText = author.textContent; authorFunction = authorText.split(". ")[1]; authorText = authorText.split(". ")[0]; if (authorFunction) { authorFunction = Zotero.Utilities.superCleanString(authorFunction); } var zoteroFunction = ''''; // TODO : Add other authotiry types if (authorFunction == ''Traduction'') { zoteroFunction = ''Translator''; } else { zoteroFunction = ''Author''; } newItem.creators.push(Zotero.Utilities.cleanAuthor(authorText, zoteroFunction, true)); } } // The serie isn''t in COinS else if (field.substr(0,5) == "Serie" || field.substr(0,10) == "Collection") { newItem.series = value; } // When there''s a subtitle, only main title is used ! else if (field == "Titre" || field == "Title") { var title = ''''; var titles = doc.evaluate(''./td[2]/div/span'', tableRow, nsResolver, XPathResult.ANY_TYPE, null); while (partTitle = titles.iterateNext()) { partTitle = partTitle.textContent; partTitle = partTitle.replace(/(\[[^\]]+\] ?)/g,""); title = title + partTitle; } // Remove the author title = title.split(" / ")[0]; newI